4

XNA でモデルを描画したい。先に進んで、Blender で作成し、fbx ファイル形式にエクスポートして、コンテンツ パイプラインが動作できるようにしました。WindowsGame() の Draw() メソッドにどのコードを追加すればよいですか? 私は次のことを試しましたが、私が得るのは灰色の画面だけです(青ではなく灰色で、これはクリアな色です、気をつけてください)モデルはcontent.Loadでインポートされ、これはエラーをスローせず、私はそれを「ボウル」と呼びました.

ここでこれが機能しない理由を誰かに教えてもらえますか?

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            BasicEffect b = new BasicEffect (graphics.GraphicsDevice, new EffectPool ( ));
            foreach (ModelMesh m in Bowl.Meshes)
            {
                b.View = Cam.mView;
                b.Projection = Cam.mProj;
                b.World = mWorld;
                b.EnableDefaultLighting ( );
                b.Begin ( );
                m.Draw ( );
                b.End ( );
            }

            base.Draw(gameTime);
        }

これは効率の点で殺人と同等であることに気づきましたが、非常に多くのことを試しましたが、最適化する前に機能する必要があります。

4

1 に答える 1

5

最初に何かをレンダリングしようとするときの非常によくある問題は、カメラが見ていると思っているものを見ていないということです。もう 1 つの考えられる問題は、モデルが期待どおりの縮尺ではないことです。たとえば、カメラが z に対して 5 単位後方にあるが、モデルの幅が 10 単位である場合、カメラは実質的にモデルの内側にあります。

レンダリングの問題に関する限り、Microsoft にはこれに関する非常に優れたドキュメントがあります: http://msdn.microsoft.com/en-us/library/bb203933.aspx

このスニペットをヘルパーとして使用できます。

private void DrawModel(Model m)
{
    Matrix[] transforms = new Matrix[m.Bones.Count];
    float aspectRatio = graphics.GraphicsDevice.Viewport.Width / graphics.GraphicsDevice.Viewport.Height;
    m.CopyAbsoluteBoneTransformsTo(transforms);
    Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
        aspectRatio, 1.0f, 10000.0f);
    Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, 50.0f, Zoom), Vector3.Zero, Vector3.Up);

    foreach (ModelMesh mesh in m.Meshes)
    {
        foreach (BasicEffect effect in mesh.Effects)
        {
            effect.EnableDefaultLighting();

            effect.View = view;
            effect.Projection = projection;
            effect.World = gameWorldRotation * transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Position);
        }
        mesh.Draw();
    }
}
于 2009-06-09T17:29:26.030 に答える