如何在 XNA 4.0 中反转模型骨骼的绘制顺序



当我用透明纹理绘制模型时,我得到这个:

坏树

我认为这是由错误的绘制顺序引起的。不幸的是,我不是建模者,我有涡轮鱿鱼的模型,它应该看起来像这样:好树

FBX模型由一个带有多个骨头的醪液组成。是否可以在 XNA4 中以相反的顺序绘制骨骼?(我使用的是基本效果,而不是自己的着色器)

或者我可以反转程序中骨骼的顺序吗?像这样:

    m.Bones = m.Bones.Reverse();

No.骨头不是"画"的。骨骼提供网格中顶点的转换,允许(例如)树弯曲。每个顶点从一个或多个骨骼中获取转换值。然后绘制网格(由这些顶点组成的三角形组成)。

更改绘制顺序仅适用于某些摄像机方向。基本上,您总是希望模型中的每个三角形都是从后到前绘制的。通常,出于性能原因,您无法执行此操作 - 特别是对于单个模型中的单个三角形。

有一种方法可以解决这个问题:深度缓冲区允许您在绘制单个像素时对其进行排序。如果像素位于先前绘制内容的"前面" - 它将替换屏幕上的像素并成为新的"正面"。如果它落后,它根本不会被吸引。

这里出现的问题是您的模型包含透明度。如果在使用深度缓冲区时绘制透明像素,它将"隐藏"应该在其"下方"绘制的像素(从视觉上讲,它不应该隐藏任何内容,因为它是透明的)。

该问题的解决方案是使用 alpha 测试。启用后,将永远不会绘制透明像素 - 因此永远不会弄乱深度缓冲区。

为此,您需要将AlphaTestEffectDepthStencilState.Default 一起使用。

最新更新