|
发表于 2007-12-7 23:29:00
|
显示全部楼层
Re:骨骼蒙皮.X 文件一些???
顺便说一下
X文件到了9.0C如果想要实现加载动画的话
那么不要用IDirectXFile那些接口
要用ID3DXFile
ID3DXFile跟先前版本的API的改动比较大的有两个地方
第一个就是遍历所有元素的时候用的是:
if(SUCCEEDED(pDXEnum->GetChildren(&dsize)))
{
for(DWORD i=0;i<dsize;i++)
{
pDXEnum->GetChild(i,&pDXData);
ParseXFileData(pDXData, TempFrame,TexturePath);
ReleaseCOM(pDXData);
}
}
第二个地方就是引用对象IDirectXFileDataReference这个不用了
因为里面有一个函数是ID3DXFileData::IsReference()
这个可以判断当前的ID3DXFileData是不是引用对象
这个在加载蒙皮骨骼动画的时候要用上
是引用对象的话
那么存的就是的名称AnimationKey 的名称
分析下一个X文件就会看到
AnimationKey {
.............
}
{ Scene_Root }
}
如果遍历到的那个ID3DXFileData调用IsReference()的话那就是指向{ Scene_Root }
这种对象
这种是属于Frame这种对象,那么就把这些当Frame处理,获取其字段当作这个结点的名称
最后一点要注意的就是动画里面的信息要跟
template AnimationKey
{
< 10DD46A8-775B-11CF-8F52-0040333594A3 >
DWORD keyType;
DWORD nKeys;
array TimedFloatKeys keys[nKeys];
}
里面这些对得上,因为
pDataObj->Lock( &dSize, &Buffer )这样来得到指向对象的指针的
所以最好熟悉C++里面结构内存分布,别移错位置了 ,要不...可怜的模型(例如TINY.X(这个女人被大伙摧残得快不成人了=.=!))
具体代码因为本人老电脑不幸归天,所以正确加载X文件动画的代码短时间内得不到
其他代码很混乱
就不发了...
|
|