My MSN

Click OK to add this content

 
Content Preview: rss
-+获取地形上某一点的高度
979 days ago
基本思想 在初始化地形时计算并保存地形上每个三角形所在平面方程的系数和常数项。此时,给定地形上某个点的 x 坐标和 z 坐标,就可以把它们带入该点所在三角形的平面方程来得到该点的高度值了。 三角形所在平面方程的系数和常数项计算过程 首先,我们要有一个数据结构来存储每个平面方程的系数和常数项,如下所示: struct  COEFFICIENT { float  a1, b1, c1, d1;   float  a2, b2, c2, d2; }; COEFFICIENT  Coefficient[Height - 1][Width - 1]; D3DXVECTOR3  TerrainVertices[Height * Width]; COEFFICIENT 结构体用来存放组成一个地形网格的两个三角形的平面信息。其中, a1, b1, c1, d1 为第一个三角形所在平面方程的系数和常数项, a2, b2, c2, d2 为第二个三角形所在平面方程的系数和常数项。假设地形宽和高方向上的顶点数分别为 Width 和 Height ,则需要 (Height - 1)*(Width - 1) 个 COEFFICIENT 结构体来存储所有三角形的平面信息。此外,还需要一个3维向量数组来存放每个地形顶点的坐标,在计算平面方程系数和常数项时会用到这些顶点。就像把顶点信息写入顶点缓冲区一样,按照从左到右、从上到下的顺序把顶点坐标写入 TerrainVertices[Height * Width] 数组,这个工作可以在创建顶点缓冲区时同步完成。然后就可以在计算顶点索引时顺便计算各个平面的系数和常数项了 :)   计算平面系数和常数项的代码如下: //平面系数和常数项的计算与顶点索引的计算同步完成 //假设pIndexBuffer为索引缓冲区的首地址,j,i为当前地形网格的行列号 for( int  j = 0; j < ( Height - 1 ); j++ ) { ...
-+HLSL实现基本光照模型
981 days ago
基本光照公式 物体上某一点受到光照后的颜色由下列公式来计算: FinalColor = Emissive + Ambient + diffuse + Specular 光照的最终颜色是发射光、环境光、漫反射光和镜面反射光综合作用的结果。其中: Emissive = Ie; Ambient = Ia * Ka; Diffuse   = Id * Ka * ( L . N ); Specular = Is * Ks * ( R . V ) ^ Ns; 以上等式中 Ix 为各种光线的强度,是一个 RGB 颜色值。 Kx 是一个取值区间为[0,1]的系数。 L 为从被照射点指向光源的单位向量。 N 为被照射点法线向量的单位向量。 R 为光线向量的反射向量。 V 从被照射点指向视点的单位向量。 Ns 是一个取值区间为[0,100]的镜面反射指数,可以控制镜面反射所产生的光斑大小。 HLSL代码 VertexShader float4x4  matWorldViewProjection; float4x4  matWorld; float3    fvLightPosition; float3    fvViewPoint; struct  VS_INPUT { float4  Position : POSITION0; float3  Normal : NORMAL0; }; struct  VS_OUTPUT { float4  Position : POSITION0; float3  Normal : TEXCOORD0; float3  Light :    TEXCOORD1; float3  View :    TEXCOORD2; }; VS_OUTPUT  vs_main(  VS_INPUT  Input  ) { ...
-+No title is available for this item.
981 days ago
No description is available for this feed.
-+No title is available for this item.
981 days ago
No description is available for this feed.
© 2009 MicrosoftMicrosoft