骨は、DirectXや何か他のものに3D Studioの最大で異なる動作をしますか?
質問
私は.Xファイルとしてエクスポートしまし3D Studioの最大で不正(二足歩行)とアニメーションのモデルを持っています。
私はそれを使用する場合は、アニメーションは、しかし、私が傾くと、腰からオンにするモデル自体を取得しようとしてきたが、私はボーン階層で、私は回転行列を適用すべき場所を見つけるのに困難を抱えている、罰金を実行します。
3D Studioの最大でBip01というモデルにbipeオブジェクトがある、私は腰上のすべてのボーンの回転カスケードを選択して回転させたときに私は(同じD3DXFRAMEに回転行列をapplyhingすると、同じ名前を持っていると仮定、Bip01は)同じ効果を持っているだろうが、それはしていません。何が起こるかというとそうBip01に変換を適用ボーン階層内のすべてに適用する効果をアップ終了される(私は他の1つの骨に伝えるかどうかはわかりませんと、それはあるかもしれない)ルート骨にそれを適用するようなものです。
ここでは、フレーム変換が更新されたコードだと私はBip01にマトリックス変換を適用しようとするコードのビットを追加しました、私は(...回転私は示すことができ、他の関連するコードがあるかどうかわかりません値は、私が投げただけでランダムな値)である。
void CAnimInstance::UpdateFrames( MultiAnimFrame* pFrame, D3DXMATRIX* pmxBase )
{
assert( pFrame != NULL );
assert( pmxBase != NULL );
IF(のstrcmp(pFrame->名、 "Bip01")== 0) { D3DXMATRIX腐れ; D3DXMatrixRotationY(&腐敗、3.141)。 D3DXMatrixMultiply(&pFrame-> TransformationMatrix、 &pFrame-> TransformationMatrix、 &腐敗 ); }
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はキャラクタースタジオでのスケルトンのルートノードである - 。私はあなたの骨格が設定されているところであると仮定し
だからあなたのコードは、スケルトンのすべての骨を更新するすべてのそれの子供たちにそれをダウンカスケードその後、bip01する回転を適用すると、正しいすなわちです。
それはアニメーターを助けるために、制約の束にセットアップされたので、あなたは、3D Studioの最大でこれを見ていない理由があると私は推測している(そしてそれは、合計の推測です)。
私は何をやってお勧めしたいことは、骨の名前を見つけることです - それから(それはおそらくBip01と呼ばれています - ヒップ)股関節の骨の名前を見つけLフィンガー1など - 彼らは通常bip01の慣例に従ってください。
代わりにあなたのコードでは、起動時に、すべての子供ダウンBip01から反復処理し、すべての骨名の辞書を構築します。
私はより良い答えはそこだと確信していますが、私の3DS maxは、私が今のできる最善のことだかなり錆びているよう:)