当我用透明纹理绘制模型时,我得到了这个:
我认为这是由于绘图顺序错误造成的。不幸的是,我不是建模师,我有 turbosquid 的模型,它应该看起来像这样: 好树
FBX 模型由一个多块骨头组成。是否可以在 XNA4 中以相反的顺序绘制骨骼?(我使用的是基本效果,不是自己的着色器)
或者我可以颠倒程序中骨骼的顺序吗?像这样的东西:
m.Bones = m.Bones.Reverse();
不,骨骼不是“绘制”的。骨骼为网格中的顶点提供变换,允许(例如)树弯曲。每个顶点从一个或多个骨骼中获取变换值。然后绘制网格(由这些顶点组成的三角形组成)。
更改绘制顺序仅适用于某些相机方向。基本上,您总是希望模型中的每个三角形都从后向前绘制。由于性能原因,您通常不能这样做 - 特别是对于单个模型中的单个三角形。
有一种解决方法:深度缓冲区允许您在绘制单个像素时对其进行排序。如果一个像素在先前绘制的“前面” - 它会替换屏幕上的像素并成为新的“前面”。如果它落后,它根本不会被绘制。
这里出现的问题是您的模型包含透明度。如果在使用深度缓冲区时绘制了透明像素,它将“隐藏”应该在其“下方”绘制的像素(从视觉上讲,它不应该隐藏任何东西,因为它是透明的)。
该问题的解决方案是使用alpha 测试。启用后,将永远不会绘制透明像素 - 因此永远不会弄乱您的深度缓冲区。
为此,您需要使用AlphaTestEffect
with DepthStencilState.Default
。