先调用一个函数D3DXLoadMeshFromX( 文件名,风格属性,D3D设备指针,三角形面邻接信息缓冲区,材质和纹理数据缓冲区&m_pMaterialBuffer,特效属性缓冲区,材质数g_dwNumMaterials,(返回)创建的网格&m_pMesh)。
调用成功后, 获取3D模型的材质和纹理信息。
D3DXMATERIAL *d3dxMaterials = (D3DXMATERIAL*)m_pMaterialBuffer->GetBufferPointer();
//创建材质
D3DMATERIAL9 *m_pMeshMaterials = new D3DMATERIAL9[g_dwNumMaterials];
//创建纹理
LPDIRECT3DTEXTURE9 *m_pMeshTextures = new LPDIRECT3DTEXTURE9[g_dwNumMaterials];//这里注意:数据类型似乎必须为LPDIRECT3DTEXTURE9,如果用IDirect3DDevice9 似乎不行.
for( DWORD i = 0; i < g_dwNumMaterials; i++)
{
m_pMeshMaterials[i] = d3dxMaterials[i].MatD3D;
if( FAILED(D3DXCreateTextureFromFile( m_pDevice, d3dxMaterials[i].pTextureFilename, &g_pMeshTextures[i])))
{
m_pMeshTextures[i] = NULL;
}
}
//绘制网格模型
for( DWORD i = 0; i < g_dwNumMaterials; i++)/
{
m_pDevice->SetMaterial( &m_pMeshMaterials[i]);
m_pDevice->SetTexture( 0, m_pMeshTextures[i]);
m_pMesh->DrawSubset(i);
}