1

モデルは .fbx です 私も多くのモデルを試しました. 何も機能していないようです. 誰かが私を助けることができるかどうか疑問に思っていました.

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace _3D
{

    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Model model;
        Matrix[] transforms;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            graphics.PreferredBackBufferHeight = 800;
            graphics.PreferredBackBufferWidth = 1280;
        }

        protected override void Initialize()
        {

            base.Initialize();
        }

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            model = Content.Load<Model>("3d/screwdriver");
            transforms = new Matrix[model.Bones.Count];
            model.CopyAbsoluteBoneTransformsTo(transforms);
        }
        protected override void UnloadContent()
        {
        }


        protected override void Update(GameTime gameTime)
        {

            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();


            base.Update(gameTime);
        }    

        // The draw method is one of the reasons I think nothing is working,

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            Matrix view = Matrix.CreateLookAt(
                new Vector3(200, 300, 900),
                new Vector3(0, 50, 0),
                Vector3.Up);
            Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), GraphicsDevice.Viewport.AspectRatio, 0.1f, 10000.0f);
            Matrix baseWorld = Matrix.CreateScale(0.4f) * Matrix.CreateRotationY(MathHelper.ToRadians(180));
            foreach (ModelMesh mesh in model.Meshes)
            {
                Matrix localWorld = transforms[mesh.ParentBone.Index] * baseWorld;
                foreach (ModelMeshPart part in mesh.MeshParts)
                { 
                BasicEffect e = (BasicEffect)part.Effect;
                e.World = localWorld;
                e.View = view;
                e.Projection = projection;
                e.EnableDefaultLighting();

                }
                mesh.Draw();
            }
            base.Draw(gameTime);
        }
    }
}
4

1 に答える 1

0

あなたのコードに本当に問題があるとは思わないので、モデルに問題がある可能性があります。

問題のモデル ファイルが原因である可能性があります。Blender のストック FBX Exporter には既知の問題があり (モデルの作成にどのモデリング ソフトウェアを使用したかはわかりませんが、問題は依然として関連しています)、モデルが実際よりも 100 倍大きいサイズでエクスポートされます。ブレンダー。その結果、モデルが非常に大きくなり、カメラが内部に収まるだけでなく、ポリゴンが視錐台を超えてしまうほど大きくなります。結果: モデルは実際にレンダリングされますが、スケーリングの問題に気付くまでカメラを動かさない限り、画面に表示されることはありません。

私は自分でこの問題に対処したので、これを言っています。実際に Blender を使用している場合は、次のページにあるエクスポーターを使用する必要があります: http://blog.diabolicalgame.co.uk/2011/07/exporting-animated-models-from-blender.html

于 2013-01-28T23:03:32.713 に答える