我正在编写一个需要适应各种潜在顶点格式的应用程序。我正在加载的网格可能有也可能没有任何数量的潜在顶点属性(颜色、法线、纹理坐标、权重等)。
一个简单的声明示例如下所示:
D3DVERTEXELEMENT9 simple_decl[] =
{
{0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
{0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
{0, 20, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
{0, 24, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1},
D3DDECL_END()
};
struct MYVERTS
{
float x,y,z,u,v;
DWORD colr;
float nx,ny,nz;
};
基本上 D3DVERTEXELEMENT9 是一个偏移数组。每个偏移量是“MYVERTS”的数据成员的大小。
如果用户导出一个只有 XYZ 坐标和颜色的模型,那么我想动态生成一个具有 3 个浮点数和 1 个双字的结构,然后生成一个带有偏移量和 D3DDECLUSAGE 的声明。
我不知道该怎么做。有人有建议吗?