本文整理汇总了C++中LPD3DXMESH::GetAttributeTable方法的典型用法代码示例。如果您正苦于以下问题:C++ LPD3DXMESH::GetAttributeTable方法的具体用法?C++ LPD3DXMESH::GetAttributeTable怎么用?C++ LPD3DXMESH::GetAttributeTable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LPD3DXMESH
的用法示例。
在下文中一共展示了LPD3DXMESH::GetAttributeTable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CreateGeometry
void CreateGeometry(const char* sourceFile)
{
cout << endl << "Reading " << sourceFile << endl;
wstring wideSourceFile(sourceFile, sourceFile + strlen(sourceFile));
// Load the mesh from the specified file
LPD3DXBUFFER pD3DXMtrlBuffer;
LPD3DXBUFFER pD3DXEffectInstances;
HRESULT hr = D3DXLoadMeshFromX(
wideSourceFile.c_str(),
D3DXMESH_SYSTEMMEM,
g_pd3dDevice, 0,
&pD3DXMtrlBuffer, &pD3DXEffectInstances, &g_dwNumMaterials,
&g_pMesh);
if (FAILED(hr))
{
MessageBox(0, (L"Could not find " + wideSourceFile).c_str(), L"X2CTM", MB_OK);
exit(1);
}
DWORD* adjacencyIn = new DWORD[3 * g_pMesh->GetNumFaces()];
g_pMesh->GenerateAdjacency(0.0001f, adjacencyIn);
DWORD* adjacencyOut = new DWORD[3 * g_pMesh->GetNumFaces()];
LPD3DXMESH newMesh = 0;
//hr = g_pMesh->Optimize(D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_COMPACT, adjacencyIn, adjacencyOut, 0, 0, &newMesh);
//hr = g_pMesh->OptimizeInplace(D3DXMESHOPT_ATTRSORT, adjacencyIn, adjacencyOut, 0, 0);
if (FAILED(hr))
{
MessageBox(0, L"Unable to build attribute table", L"Whatever", MB_OK);
exit(1);
}
//g_pMesh = newMesh;
if (WeldVertices)
{
DWORD beforeVertCount = g_pMesh->GetNumVertices();
DWORD beforeFaceCount = g_pMesh->GetNumFaces();
hr = D3DXWeldVertices(g_pMesh, D3DXWELDEPSILONS_WELDALL, 0, 0, 0, 0, 0);
DWORD afterVertCount = g_pMesh->GetNumVertices();
DWORD afterFaceCount = g_pMesh->GetNumFaces();
}
D3DXATTRIBUTERANGE table[256];
DWORD tableSize = sizeof(table) / sizeof(table[0]);
g_pMesh->GetAttributeTable(&table[0], &tableSize);
D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*) pD3DXMtrlBuffer->GetBufferPointer();
D3DXEFFECTINSTANCE* d3dxEffects = (D3DXEFFECTINSTANCE*) pD3DXEffectInstances->GetBufferPointer();
g_pMeshMaterials = new D3DMATERIAL9[g_dwNumMaterials];
g_pMeshTextures = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];
for (DWORD i = 0; i < g_dwNumMaterials; i++)
{
g_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
g_pMeshMaterials[i].Ambient = g_pMeshMaterials[i].Diffuse;
g_pMeshTextures[i] = 0;
if (d3dxMaterials[i].pTextureFilename && lstrlenA(d3dxMaterials[i].pTextureFilename) > 0)
{
D3DXCreateTextureFromFileA(g_pd3dDevice, d3dxMaterials[i].pTextureFilename, &g_pMeshTextures[i]);
}
}
/*
for (DWORD attrib = 0; attrib < tableSize; ++attrib)
{
// I'm not so sure about material-to-attribute correlation
// if (attrib < g_dwNumMaterials)
// {
LPSTR pTexture = d3dxMaterials[attrib].pTextureFilename;
LPSTR pSlash = strchr(pTexture, '\\');
if (pSlash)
{
pTexture = ++pSlash;
}
cout << "{Texture='" << pTexture << "',";
// }
string subMeshFilename = string("X_") + string("Armature.ctm"); // string(pTexture).substr(0, strlen(pTexture) - 4) + ".ctm";
subMeshFilename[0] = attrib + 'A';
ExportRangeCTM(table[attrib], g_pMesh, subMeshFilename.c_str());
cout
//<< table[attrib].AttribId << ' '
<< "FaceStart=" << table[attrib].FaceStart << ','
<< "FaceCount=" << table[attrib].FaceCount << ','
<< "VertexStart=" << table[attrib].VertexStart << ','
<< "VertexCount=" << table[attrib].VertexCount << '}' << endl;
}
*/
pD3DXMtrlBuffer->Release();
// Convert the filename from .X to .CTM while preserving the full path.
char destFile[_MAX_PATH];
//.........这里部分代码省略.........