|
发表于 2007-8-1 03:30:00
|
显示全部楼层
Re:关于骨骼动画及微软示例Skinned Mesh的解析
楼主,看了你这篇文章对我帮助很大,但是有点疑问,你说:
在动画文件中,框架通常用来描述骨骼。可以把Frame视做骨骼,所以不细加区分。
.在上面D3DXFRAME结构中,pFrameSibling, pFrameFirstChild两个指针,常用于递归函数中,遍历整个骨架。
.在D3DXFRAME结构中有一个pMeshContainer指针,难道框架与Mesh是一一对应的吗?
有一个框架(骨骼)就有一个Mesh吗?怎么.X文件中只有一个Mesh?难道加载时拆开存放?
答:从D3DXFrame结构上看,每个Frame都有一个pMeshContainer指针。这就有三种解释:
第一种,加载到内存后所有的pMeshContainer都指向同一个全局Mesh
第二种,加载到内存后,只有一个主框架的pMeshContainer不为空,其它Frame的pMeshContainer均为NULL,因为在.X中,它们没有定义自己的Mesh
第三种,加载到内存后,D3D将Mesh拆分,分开到各骨骼所对应的Frame,每个Frame都有自己的Mesh。
你说是第二种情况.
那这样的话,在如下代码中
void DrawFrame( IDirect3DDevice9 *pd3dDevice, LPD3DXFRAME pFrame )
{
LPD3DXMESHCONTAINER pMeshContainer;
pMeshContainer = pFrame->pMeshContainer;
while (pMeshContainer != NULL)
{
DrawMeshContainer( pd3dDevice, pMeshContainer, pFrame );
pMeshContainer = pMeshContainer->pNextMeshContainer;
}
if (pFrame->pFrameSibling != NULL)
{
DrawFrame( pd3dDevice, pFrame->pFrameSibling);
}
if (pFrame->pFrameFirstChild != NULL)
{
DrawFrame( pd3dDevice, pFrame->pFrameFirstChild );
}
}
其中的
while (pMeshContainer != NULL)
{
DrawMeshContainer( pd3dDevice, pMeshContainer, pFrame );
pMeshContainer = pMeshContainer->pNextMeshContainer;
}就只在一层的递归调用的函数中执行了一次这样的循环?
|
|