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

时间:2012-06-26 16:43:17

标签: model draw transparent xna-4.0

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

bad tree

我认为这是由糟糕的绘画顺序引起的。不幸的是我不是建模师,我有来自turbosquid的模型,它应该是这样的: good tree

FBX模型包含一个带有几个骨骼的混搭。是否有可能在XNA4中以相反的顺序绘制骨骼? (我使用的是基本效果,而不是自己的着色器)

或者我可以在程序中改变骨骼的顺序吗?像这样:

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

1 个答案:

答案 0 :(得分:0)

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

更改绘制顺序仅适用于某些相机方向。基本上,您总是希望模型中的每个三角形都是从后向前绘制的。由于性能原因,通常不能这样做 - 特别是对于单个模型中的单个三角形。

有一种解决方法:深度缓冲区允许您在绘制时对各个像素进行排序。如果像素位于先前绘制的像素的前面 - 它将替换屏幕上的像素并成为新的“前端”。如果它落后了,它根本就不会被画出来。

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

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

要执行此操作,您需要将AlphaTestEffectDepthStencilState.Default一起使用。