Animation 骨骼在3D Studio Max中的行为与DirectX或其他东西不同?

Animation 骨骼在3D Studio Max中的行为与DirectX或其他东西不同?,animation,directx,matrix,hierarchy,Animation,Directx,Matrix,Hierarchy,我在3D Studio Max中有一个装备(biped)和动画模型,我已将其导出为.x文件 当我使用它时,动画运行良好,但是我一直试图让模型本身从臀部倾斜和旋转,但是我很难找到在骨骼层次中我应该应用旋转矩阵的位置 在3D Studio Max中,模型上有一个名为Bip01的bipe对象,当我选择并旋转它时,旋转将级联到臀部上方的所有骨骼上,因此我假设将旋转矩阵应用到相同的D3DXFRAME(具有相同的名称,Bip01)将具有相同的效果,但它没有。结果是效果最终应用于骨骼层次中的所有对象,因此将变

我在3D Studio Max中有一个装备(biped)和动画模型,我已将其导出为.x文件

当我使用它时,动画运行良好,但是我一直试图让模型本身从臀部倾斜和旋转,但是我很难找到在骨骼层次中我应该应用旋转矩阵的位置

在3D Studio Max中,模型上有一个名为Bip01的bipe对象,当我选择并旋转它时,旋转将级联到臀部上方的所有骨骼上,因此我假设将旋转矩阵应用到相同的D3DXFRAME(具有相同的名称,Bip01)将具有相同的效果,但它没有。结果是效果最终应用于骨骼层次中的所有对象,因此将变换应用于Bip01就像将其应用于路线骨骼(可能是这样,因为我不确定如何区分一块骨骼和另一块骨骼)

这是帧变换正在更新的代码,我添加了一些代码,试图将矩阵变换应用于Bip01,我不确定是否还有其他相关代码可以显示。。。(旋转值只是我输入的随机值)

如果(strcmp(pFrame->Name,“Bip01”)==0) { D3DXMATRIX rot;D3DXMATRIX Rotationy(&rot,3.141); D3DXMatrix多层(&pFrame->转换矩阵, &pFrame->转换矩阵, &腐烂); }


*我认为我应该做的是找到Bip01的所有子帧并对其应用变换,但我该如何做?

Bip01是Character Studio中骨架的根节点-我假设是骨架的设置位置。
因此,您的代码是正确的,即对bip01应用旋转,然后将该旋转级联到其所有子项,将更新骨架中的所有骨骼

我猜(这是一个完全的猜测),为什么你没有在3D Studio Max中看到这一点,是因为它设置了一系列约束来帮助动画师

我建议做的是找到骨骼名称-它们通常遵循bip01-L Finger 1等惯例,然后找到髋骨的名称(可能称为bip01-hip)。
或者,在代码中启动时,从Bip01向下迭代所有子项,并建立一个包含所有骨骼名称的字典

我相信有更好的答案,但由于我的3DS max已经生锈,这是我目前所能做的最好的答案:)

void CAnimInstance::UpdateFrames( MultiAnimFrame* pFrame, D3DXMATRIX* pmxBase )
{
    assert( pFrame != NULL );
    assert( pmxBase != NULL );
    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 );
 }
}