xna 3d模型显示破碎

时间:2011-11-26 06:50:34

标签: c# xna xna-4.0

我只是尝试在xna 4.0中使用basicEffect绘制一个简单的3D模型(许多模型(.fbx)测试),并且没有其他对象,如2d spritebatchs或text或... 但它没有正确显示,我搜索它并做了一些解决方案,但没有人工作 喜欢集合

graphics.GraphicsDevice.BlendState = BlendState.Opaque;
graphics.GraphicsDevice.DepthStencilState = DepthStencilState.Default;

虽然我没画其他东西!什么是有趣的我已经使用3D模型没有问题! 这是我的绘图代码和结果截图

 protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.White);
            graphics.GraphicsDevice.BlendState = BlendState.Opaque;
            graphics.GraphicsDevice.DepthStencilState = DepthStencilState.Default;
            foreach (ModelMesh mesh in m_Model.Meshes)
            {
                foreach (ModelMeshPart meshPart in mesh.MeshParts)
                {
                    BasicEffect effect = (BasicEffect)meshPart.Effect;
                    effect.View = Matrix.CreateLookAt(new Vector3(0, 100, 1000), Vector3.Zero, Vector3.Up);
                    effect.World = bones[mesh.ParentBone.Index] * (Matrix.CreateWorld(Vector3.Zero, Vector3.Right, Vector3.Up));
                    effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, GraphicsDevice.Viewport.AspectRatio, 0.0001f, 1000000f);
                    effect.EnableDefaultLighting();
                }
                mesh.Draw();
            }
            base.Draw(gameTime);
        }

result another model

你的时间

2 个答案:

答案 0 :(得分:2)

投影矩阵中的近剪辑值很可能导致此问题。尝试将其设置为1.0f而不是0.0001f。如果这不能完全解决问题,请将远程剪辑降至10000f以下。

编辑 - 注意到您的相机距离您的模型超过1000个单位,您甚至可以将近剪辑设置为5f或10f,以便在需要时获得深度读取精度。

答案 1 :(得分:1)

它是深度缓冲区的问题,你正在使用spritebrite来绘制一些能够改变默认深度缓冲区的东西。

在绘制三维模型网格之前启用它。

调用SpriteBatch.End()后,添加以下代码:

device.DepthStencilState = DepthStencilState.Default;