У меня есть следующее склонение вершины:
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 );
Когда я пытаюсь получить размер FVF для pTempMesh (D3DXGetFVFVertexSize (pTempMesh-> GetFVF ())), я получаю «0», хотя размер должен быть 48.
Все в порядке, если у меня нет последнего объявления, '{0, 36, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0},' в нем, и функция CloneMesh не возвращает FAIL. Я также пытался использовать различные объявления, такие как D3DDECLUSAGE_TEXCOORD, и это работало нормально, возвращая размер 48. Есть ли что-то конкретное в D3DDECLUSAGE_TANGENT, которого я не знаю?
Я в полном недоумении, почему это не работает ...