1

バイナリ ファイルからカスタム モデルをロードしましたが、ボーン データの使用方法がわかりません。ModelBone などに使用する方法はありますか? 私は CustomBone[] を持っています:

class CustomBone 
{
    int parentIndex;
    Vector3 positionAbs;
    Quaternion rotationAbs;
    Vector3 positionRel;
    Quaternion rotationRel;
}

または、ModelBoneCollection を埋める方法は?

4

1 に答える 1

1

まず第一に、Model実行時に a を作成または変更することはできません ( details )。実際、必要に応じて、独自の を実装することになっています。Model開始するための最低限の機能です。

ただし、ビルド時にコンテンツ パイプラインを介して を作成できます。Model

または、より具体的には、を出力するカスタム コンテンツ インポーターを作成できますNodeContent。次に、これをコンテンツ パイプラインを介してModelProcessor(またはそれから派生した独自のクラス) に渡すことができますModelContent。有効に変更することもできませんModelContent。はシリアル化され、実行時にModelContentとしてロードされます。Model

出力先は、NodeContentモデルを表すツリー構造です。実際にはMeshContentBoneContentノードで構成されます (これらは から派生したクラスですNodeContent)。

正直なところ、そのツリーの正確な構造を追跡するのは少し難しいです (ドキュメントは非常に不足しています)。これは、あなたを正しい軌道に乗せるための質問と答えです。また、既知のモデルでビルトインを使用し、 XNA コンテンツ パイプライン デバッガー(独自のインポーターを実装するときに一般的に役立つツール) を使用してFbxImporterその出力を検査することで、うまくいく場合もあります。


ボーン データは として保存されMatrixますBoneContent.Transform。このマトリックスを作成するには、次のようなことを行う必要があると思います。

boneContent.Transform = Matrix.Transform(
        Matrix.CreateTranslation(customBone.positionRel),
        customBone.rotationRel);

実行時にボーン データを として保持したい場合はQuaternion、独自の代替手段を実装する必要がありますModel

于 2012-10-08T07:51:38.537 に答える