次の頂点のデクリレーションがあります。
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を、新しい頂点宣言を含む別のID3DXMeshにコピーすることです。
model->CloneMesh( model->GetOptions(), MESHVERTInstanced::Decl,
gd3dDevice, &pTempMesh );
pTempMeshのFVFサイズを取得しようとすると(D3DXGetFVFVertexSize(pTempMesh-> GetFVF()))、サイズは48であるはずですが、「0」が表示されます。
最後の宣言'{0、36、D3DDECLTYPE_FLOAT3、D3DDECLMETHOD_DEFAULT、D3DDECLUSAGE_TANGENT、0}'がなく、CloneMesh関数がFAILを返さない場合は、すべて問題ありません。また、D3DDECLUSAGE_TEXCOORDなどのさまざまな宣言を使用してみましたが、これは正常に機能し、48のサイズを返しました。D3DDECLUSAGE_TANGENTに固有の何かがわかりませんか?
なぜこれが機能しないのか、私は完全に途方に暮れています...