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)