【问题标题】:XNA, how to draw two cubes standing in line parallelly?XNA,如何绘制两个平行排列的立方体?
【发布时间】:2014-05-29 10:24:40
【问题描述】:

我在绘制两个排成一行的 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(相机、效果);

【问题讨论】:

  • 我不知道这是否会有所帮助,但请尝试对所有立方体使用相同的 RasterizerState。

标签: c# 3d xna


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多