XNA,如何平行绘制两个立方体?

时间:2014-05-29 10:24:41

标签: c# 3d xna

我刚刚绘制了两个3D立方体排成一行的问题。在我的代码中,我制作了一个立方体类,在game1类中,我构建了两个立方体,A在右侧,B在左侧。我还在3D世界中设置了FPS相机。问题是如果我首先绘制立方体B(蓝色),并将相机移动到左边的立方体B,A(红色)仍然站在B的前面,这显然是错误的。

我猜一些照片可能很有意义。enter image description here 然后,我将相机移到另一边,情况如下: enter image description here  这是错误的.... 从这个角度看,红色立方体A应该在蓝色立方体后面,B ....

请问有人帮我吗?

这是Cube类中的绘制

Matrix center = Matrix.CreateTranslation(
new Vector3(-0.5f, -0.5f, -0.5f));
Matrix scale = Matrix.CreateScale(0.5f);
Matrix translate = Matrix.CreateTranslation(location);
effect.World = center * scale * translate;
effect.View = camera.View;
effect.Projection = camera.Projection;

foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                device.SetVertexBuffer(cubeBuffer);

                RasterizerState rs = new RasterizerState();
                rs.CullMode = CullMode.None;
                rs.FillMode = FillMode.Solid;
                device.RasterizerState = rs;

                device.DrawPrimitives(
                PrimitiveType.TriangleList,
                0,
                cubeBuffer.VertexCount / 3);
            }

这是game1中的Draw方法

A.Draw(相机,效果); B.Draw(相机,效果);

1 个答案:

答案 0 :(得分:2)

好像你的深度缓冲区不起作用。你关掉了吗?确保使用正确的DepthStencilState并且您有一个绑定的深度缓冲区(默认情况下都应该正确设置)。

另一个可能的原因是效果没有返回合理的深度信息。但是,这似乎不太可能。