我刚刚绘制了两个3D立方体排成一行的问题。在我的代码中,我制作了一个立方体类,在game1类中,我构建了两个立方体,A在右侧,B在左侧。我还在3D世界中设置了FPS相机。问题是如果我首先绘制立方体B(蓝色),并将相机移动到左边的立方体B,A(红色)仍然站在B的前面,这显然是错误的。
我猜一些照片可能很有意义。 然后,我将相机移到另一边,情况如下: 这是错误的.... 从这个角度看,红色立方体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(相机,效果);
答案 0 :(得分:2)
好像你的深度缓冲区不起作用。你关掉了吗?确保使用正确的DepthStencilState
并且您有一个绑定的深度缓冲区(默认情况下都应该正确设置)。
另一个可能的原因是效果没有返回合理的深度信息。但是,这似乎不太可能。