我在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中荒废了那是关于我现在做的最好的:)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top