|
|
我现在正在学习D3D8编程,下面是一个封装好的加载X-File的函数。
大家请看一下如果要用这个函数加载一个X文件是不是只需要:
hLoadXFile(“要加载的X文件名”);
如果要想在给它加载纹理怎么办啊?
HRESULT hLoadXFile(char *szName)
{
HRESULT hResult = S_OK;
int i;
char szFullPath[256];
dwNumMaterials = 0;
// 加载几何图形
if( FAILED( D3DXLoadMeshFromX(
szName,
D3DXMESH_SYSTEMMEM,
pd3dDevice,
NULL,
&pD3DXMtrlBuffer,
&dwNumMaterials,
&pMesh ) ) ) {
return(-1);
}
D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
// 收集用于材质和纹理的内存
pMeshMaterials = new D3DMATERIAL8[dwNumMaterials];
pMeshTextures = new LPDIRECT3DTEXTURE8[dwNumMaterials];
// 加载材质和纹理
for( i = 0; i < (signed)dwNumMaterials ; i++ ) {
// 复制材质
pMeshMaterials = d3dxMaterials.MatD3D;
// 设置用于材质的环境色(D3DX 不使用)
pMeshMaterials.Ambient = pMeshMaterials.Diffuse;
sprintf(szFullPath,"3DData//%s",d3dxMaterials.pTextureFilename);
// 创建纹理
if( FAILED( D3DXCreateTextureFromFile(
pd3dDevice,
szFullPath,
&pMeshTextures ) ) ) {
delete pMeshTextures;
pMeshTextures = NULL;
}
}
// 释放材质缓存
SAFE_RELEASE(pD3DXMtrlBuffer);
return( hResult );
}
|
|