作者:StrongCoding
邮箱:StrongCoding@qq.comDX群:130302441
若文中有误,请告知.十分感谢.一起加油.
上一篇中,我们一起学习了如何加载一个.X文件,并且从其中提取相关的材质和纹理信息,接着优化并绘制的过程。在这一篇里,我们 将一起学习如何给没有法线信息的MESH创建法线,好了不多说了,开始:
当提供给我们的确实是没有法线信息的MESH的时候,或者通过D3DXLoadMeshFromX函数创建MESH的时候,没
D3DFVF_NORMAL的时候,我们还想要法线信息,这时候,我们只有重新克隆复制一个MESH出来:
之前注意加一次判断,看到底我们之前创建的MESH是否包含法线信息,如果不包含法线信息,则执行下面:
检测代码是:
if( ! (pMesh->getFVF() & D3DFVF_NORMALS) )
{
ID3DXMesh *pTempMesh = NULL;
pMesh->CloneMeshFVF( D3DXMESH_MANAGED, pMesh->GetFVF()|D3DFVF_NORMAL, Device, &pTempMesh );
D3DXCompyterNormals( &pTempMesh, 0 );
pMesh->Realease();
pMesh = pTempMesh;
}
重要函数的解释:
HRESULT D3DXComputeNormals(
LPD3DXBASEMESH pMesh, CONST DWORD * pAdjacency );
这个函数通过顶点法线产生平均法线。假如有邻接信息,重复的顶点是会被忽略的;如果没有邻接信息,那么重复的顶点也是会 被计算的。