You need to have JavaScript enabled to use this page.
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 Microsoft