0

ストックエンジンモデルを使用して3DSMaxでシーンを作成し、自分自身、飛行機、ボタンを追加しました。

http://i.stack.imgur.com/R2iva.png

シーンをエクスポートする方法に関係なく、パンダエクスポータを使用する.Xとして、または2012.2 fbxエクスポータを使用する.fbxとして、XNAにロードしてレンダリングすると、すべてが重なり合って表示されます。

http://i.stack.imgur.com/6gdMb.png

エンジンの個々の部分はすべて本来あるべき場所にとどまっているので(そして3ds maxで分離されている)、残りのオブジェクトのレイアウトで3dsmaxに正しく設定されていないものがあることを確信しています。

アップデート1:xnaにモデルをロードするために使用するコードは次のとおりです

        Matrix[] transforms = new Matrix[model.Bones.Count];
        model.CopyAbsoluteBoneTransformsTo(transforms);

        foreach (ModelMesh mesh in model.Meshes)
        {
            foreach (BasicEffect be in mesh.Effects)
            {
                be.EnableDefaultLighting();
                be.Projection = camera.projection;
                be.View = camera.view;
                be.World = GetWorld() * mesh.ParentBone.Transform;
                // adding the additional * transforms[i]; didnt do anything  

            }
            mesh.Draw();
        }

このコードは他の人々のモデルには最適ですが、私が作成したものには適していません。3ds maxのように、シーンの原点を基準にしてシーン内に作成したオブジェクトの位置をエクスポートしません。

4

1 に答える 1

1

次のように、親ボーンと子ボーンからのすべての変換行列を組み合わせる必要があります。

Matrix[] transforms = new Matrix[model.Bones.Count];
model.CopyAbsoluteBoneTransformsTo(transforms);

foreach (ModelMesh mesh in model.Meshes) {
    foreach (BasicEffect ef in mesh.Effects) {
        ef.World = transforms[mesh.ParentBone.Index];
        //Also do other stuff here, set projection and view matrices
    }
}

おそらくもっと良い方法がありますが、このコードは機能するはずです。

于 2012-01-18T23:50:10.323 に答える