XNA 3D модель показана сломанной - PullRequest
1 голос
/ 26 ноября 2011

Я просто пытаюсь нарисовать простую 3d-модель (многие протестированные модели (.fbx)) с basicEffect в xna 4.0, и нет другого объекта, такого как 2d spritebatch или текст или ..., но он не отображается правильно, я искалон и сделал какое-то решение, но никто не работал как set

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 ]

2 голосов
/ 26 ноября 2011

Вероятнее всего, это связано с близким значением клипа в матрице проекции. Попробуйте установить его на 1.0f вместо 0.0001f. Если это не решит проблему полностью, уменьшите дальний клип до 10000f.

edit - заметив, что ваша камера находится на расстоянии более 1000 единиц от вашей модели, вы можете даже установить ближний клип на 5f или 10f, чтобы получить точность считывания глубины при необходимости.

1 голос
/ 01 декабря 2012

Это проблема буфера глубины, вы используете spritebrite для рисования чего-то, что изменяет ваш буфер глубины по умолчанию.

Сделайте это, прежде чем рисовать 3d модель сетки.

После вызова SpriteBatch.End () добавьте этот код:

device.DepthStencilState = DepthStencilState.Default;

...