|

楼主 |
发表于 2012-2-16 19:51:00
|
显示全部楼层
Re:学习NORMAL MAP的实现中遇到的问题
问题解决了。写下来防止有人有同样问题吧233
1。首先一定要自定义fvf格式,别用xfile的,否则不同的xfile有的会成功有的不成功。甚至连computenormal都不成功= =
比如这样:
D3DVERTEXELEMENT9 decl[] =
{
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
{ 0, 24, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
{ 0, 32, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 },
D3DDECL_END()
};
Mesh->CloneMesh(
D3DXMESH_MANAGED,
decl,
Device,
&Mesh);
2。然后计算法线,然后计算切线
if(FAILED(D3DXComputeNormals(Mesh,NULL)))
::MessageBox(0, "D3DXComputeNormals() - FAILED", 0, 0);//算法线
if(FAILED(D3DXComputeTangent(Mesh,0,0,D3DX_DEFAULT,FALSE,NULL)))//算切线
::MessageBox(0, "D3DXComputeTangent() - FAILED", 0, 0);
ps:这里的2-4个参数其实传的就是你自定义的fvf的标号数,就是 { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 } 里最后一个0的位置,这里一般都用0,所以传0,
D3DX_DEFAULT就是-1,不计算的意思,因为可以把normal和tangent传到vs去算出binormal的,节省时间空间
|
|