C# 显示的xna 3d模型已损坏

C# 显示的xna 3d模型已损坏,c#,xna,xna-4.0,C#,Xna,Xna 4.0,我只是试着用XNA4.0中的BasicFect绘制一个简单的3d模型(测试了许多模型(.fbx)),没有其他像2d SpriteBatch或文本或。。。 但它没有正确显示,我搜索了它并做了一些解决方案,但没有人工作 相似集 graphics.GraphicsDevice.BlendState = BlendState.Opaque; graphics.GraphicsDevice.DepthStencilState = DepthStencilState.Default; 虽然我没有画别的东西

我只是试着用XNA4.0中的BasicFect绘制一个简单的3d模型(测试了许多模型(.fbx)),没有其他像2d SpriteBatch或文本或。。。 但它没有正确显示,我搜索了它并做了一些解决方案,但没有人工作 相似集

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);
        }


对于您的时间而言,投影矩阵中的“近剪裁”值最有可能导致这种情况。尝试将其设置为1.0f而不是0.0001f。如果这还不能完全解决问题,请将远端剪辑降低到10000华氏度


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

这是深度缓冲区的问题,您正在使用spritebrite绘制更改默认深度缓冲区的内容

在绘制三维模型网格之前启用该选项

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


device.DepthStencilState=DepthStencilState.Default

ty m8,是的,近平面距离太小,发现在发布问题后,将0.0001f更改为0.1f修复了此问题