我有以下顶点声明:
struct MESHVERTInstanced
{
float x, y, z; // Position
float nx, ny, nz; // Normal
float tu, tv; // Texcoord
float idx; // index of the vertex!
float tanx, tany, tanz; // The tangent
const static D3DVERTEXELEMENT9 Decl[6];
static IDirect3DVertexDeclaration9* meshvertinstdecl;
};
我这样声明:
const D3DVERTEXELEMENT9 MESHVERTInstanced::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_FLOAT1, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1 },
{ 0, 36, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 },
D3DDECL_END()
};
我接下来尝试做的是使用新的顶点声明将 ID3DXMesh 复制到另一个中:
model->CloneMesh( model->GetOptions(), MESHVERTInstanced::Decl,
gd3dDevice, &pTempMesh );
当我尝试获取 pTempMesh (D3DXGetFVFVertexSize(pTempMesh->GetFVF())) 的 FVF 大小时,我得到“0”,尽管大小应该是 48。
如果我没有最后一个声明 '{ 0, 36, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 },' 并且 CloneMesh 函数不返回失败,那么整个事情都很好。我也尝试过使用不同的声明,例如 D3DDECLUSAGE_TEXCOORD,效果很好,返回的大小为 48。我不知道 D3DDECLUSAGE_TANGENT 有什么具体的吗?
我完全不知道为什么这不起作用......