DX9b 与 DX9c 在x文件解析方面带来的麻烦

IDirectXFile,IDirectXFileData等接口被改为ID3DXFile,ID3DXFileData

因此 directx高级动画制作  中的例子就有很多地方需要改,比如最长遇见的错误【error C2664: “D3DXLoadMeshFromXof”: 不能将参数1 从“LPDIRECTXFILEDATA”转换为“LPD3DXFILEDATA”与指向的类型无关;转换要求reinterpret_cast、C 样式转换或函数样式转换】

更改前获取xfile

pDXFile->CreateEnumObject((LPVOID)xFileName,DXFILELOAD_FROMFILE,&pEnum);

更改后获取xfile

pDXFile->CreateEnumObject((LPVOID)xFileName,D3DXF_FILELOAD_FROMFILE,&pEnum);

***注意:更改后注册模板的代码一定要在获取xfile之前注册,不然会在getchildren时遇到异常

if(FAILED(pDXFile->RegisterTemplates(
(LPVOID)D3DRM_XTEMPLATES,
D3DRM_XTEMPLATE_BYTES))) {
pDXFile->Release();
return FALSE;
}

pDXFile->CreateEnumObject((LPVOID)xFileName,D3DXF_FILELOAD_FROMFILE,&pEnum);

**********************************************************************

更改前遍历数据

while(SUCCEEDED(hr = pEnum->GetNextDataObject(&pData)))
{

 pData->Release();
}

更改后遍历数据

if(SUCCEEDED(hr = pEnum->GetChildren(&datanum))){
for(SIZE_T i = 0;i<datanum;i++){
if(SUCCEEDED(pEnum->GetChild(i,&pData))){

}

pData->Release();
}
}

 

更改后获取模板类型变为

GUID Type ;
pData->GetType(&Type)

posted @ 2012-01-23 10:23  重甲土拨鼠  阅读(590)  评论(0编辑  收藏  举报