骨在3D Studio Max的行为不同,以DirectX或其他什么东西?
题
我在3D Studio Max一个操纵(双足)和动画模型我已经导出为.X文件。
当我使用它的动画运行良好,但我一直在试图让模型本身瘦,并从髋内翻,但我有找到其中的骨骼层次,我应该使用旋转矩阵的困难。
在3D Studio Max的有上称为将Bip01模型中的bipe对象,当我选择并旋转它在臀部上面所有骨骼的旋转级联,所以我假定applyhing旋转矩阵为相同D3DXFRAME(其具有相同的名称,将Bip01)将有同样的效果,但事实并非如此。什么情况是影响最终的骨骼层次使应用转换到将Bip01适用于一切都像它应用到路线骨(这可能是因为我不知道如何告诉从另一个骨)。
在此处,帧转换正在更新的代码,我添加一些代码试图应用矩阵转换将Bip01,我不知道是否有任何其他相关的代码,我可以告诉...(旋转值仅仅是一个随机值I扔在)
void CAnimInstance::UpdateFrames( MultiAnimFrame* pFrame, D3DXMATRIX* pmxBase )
{
assert( pFrame != NULL );
assert( pmxBase != NULL );
如果(的strcmp(pFrame->名称, “将Bip01”)== 0) { D3DXMATRIX腐烂; D3DXMatrixRotationY(腐烂,3.141); D3DXMatrixMultiply(pFrame-> TransformationMatrix, &pFrame-> TransformationMatrix, &ROT); }
D3DXMatrixMultiply( &pFrame->TransformationMatrix,
&pFrame->TransformationMatrix,
pmxBase );
// transform siblings by the same matrix
if( pFrame->pFrameSibling )
UpdateFrames( ( MultiAnimFrame* )pFrame->pFrameSibling, pmxBase );
// transform children by the transformed matrix - hierarchical transformation
if( pFrame->pFrameFirstChild )
{
UpdateFrames( ( MultiAnimFrame* )pFrame->pFrameFirstChild,
&pFrame->TransformationMatrix );
}
}
*什么,我想我应该做的是找到所有的孩子帧为将Bip01和应用转换到他们,但我怎么做呢?
解决方案
将Bip01是用于字符Studio中的骨架根节点 - 我假定是你骨架设置结果。 所以,你的代码是将旋转以将Bip01,然后级联下来到它所有的孩子将更新骨骼的骨头正确即。
我猜(这是一个总的猜测),那你为什么没有在3D Studio Max看到这种情况的原因是因为它的成立与一群约束,以帮助动画师。
我会建议做的是找到骨骼的名字 - 他们通常遵循的将Bip01公约L - 1手指等再找到髋骨的名称(它可能称为将Bip01 - 臀围)。结果 或者在你的代码的启动,从将Bip01遍历了所有的孩子们,并建立所有骨骼名称的字典。
我敢肯定有一个更好的答案,但我的3ds Max中荒废了那是关于我现在做的最好的:)