0

プロジェクトの期限が迫っていますが、3D Studio Max で作成したモデルを読み込もうとすると多くの問題が発生します。私が作成したモデルは、XNA ゲームの地形として必要なものです。これが私がこれまでに行ったことです:

方法:

    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

    Model terrainModel;
    Vector3 terrainPosition = Vector3.Zero;

    Vector3 cameraPosition = new Vector3(0.0f, 60.0f, 160.0f);
    Vector3 cameraLookAt = new Vector3(0.0f, 60.0f, 160.0f);
    Matrix cameraProjectionMatrix;
    Matrix cameraViewMatrix;

LoadContent()

        spriteBatch = new SpriteBatch(GraphicsDevice);

        cameraViewMatrix = Matrix.CreateLookAt(
            cameraPosition,
            Vector3.Zero,
            Vector3.Up);

        cameraProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(
            MathHelper.ToRadians(80.0f),
            graphics.GraphicsDevice.Viewport.AspectRatio,
            1.0f,
            1000.0f);

        terrainModel = Content.Load<Model>("alphastreet");

Draw(GameTime gameTime)

GraphicsDevice.Clear(Color.CornflowerBlue);

        DrawModel(terrainModel, terrainPosition);

        // TODO: Add your drawing code here

        base.Draw(gameTime);

そして、私は描きたい:

void DrawModel(Model model, Vector3 modelPosition)
    {
        foreach (ModelMesh mesh in model.Meshes)
        {
            foreach (BasicEffect effect in mesh.Effects)
            {
                effect.EnableDefaultLighting();
                effect.PreferPerPixelLighting = true;

                effect.World = Matrix.CreateTranslation(modelPosition);
                effect.Projection = cameraProjectionMatrix;
                effect.View = cameraViewMatrix;
            }
            mesh.Draw();
        }
    }

それ以外はすべて、XNA ファイルの外観と同じです。モデル自体はかなり単純な通りのように見えます。ただし、XNA がモデルをロードすると、ロードされるのはウィンドウ内の大きなブロックにすぎません。

モデルをこのようにロードするために何をしているのかわかりませんが、髪の毛を引っ張っています。どんな助けでも大歓迎です。

また、ウォークスルー/ガイド、または一人称シューティングカメラを作成するクラスに私を導くことができる人はいますか?それは私が行くゲームだからです. 私はおそらくそれを選ぶべきではありませんでしたが、今変更するには遅すぎます.

ありがとう、ジェイク!

4

1 に答える 1

0

モデルに複数のメッシュがありますか? もしそうなら、それぞれを別々にレンダリングしてみましたか? これらが問題ではないことを確認するために、ワールドとビューの単位マトリックスを使用してみましたか? xna/directx に他の状態変更を加えていないと思います。もしそうなら、これらを無効にしてみてください。

FPS カメラの場合、float 変数で x と y の回転を追跡し、マウスが x と y で移動した距離に基づいて各フレームを更新できます。これらから、カメラ ビュー マトリックスを生成できます。次のようなもの:

var mx = Matrix.CreateRotationX(xangle);
var my = Matrix.CreateRotationY(yangle);
var pos = Matrix.CreateTranslation(position);
var view = mx * my * pos; // These might be in the wrong order, not sure off the top of my head
view.Invert();

左に移動すると世界が右に移動し、左に回すと世界が右に回転するため、カメラは常に反転します。

于 2013-04-22T10:18:22.610 に答える