我正在展示 的许多实例BasicEffect
,每个实例都是一个“板”,随机选择四种纹理之一,部分透明或完全不透明。
我遇到的问题是,当渲染具有透明度的板时,只有已经渲染的板才能通过它显示。
很难解释一切是如何显示的,所以这里是图像。
有没有比按正确顺序渲染更简单的解决方案?
我正在展示 的许多实例BasicEffect
,每个实例都是一个“板”,随机选择四种纹理之一,部分透明或完全不透明。
我遇到的问题是,当渲染具有透明度的板时,只有已经渲染的板才能通过它显示。
很难解释一切是如何显示的,所以这里是图像。
有没有比按正确顺序渲染更简单的解决方案?
深度缓冲区存储在该位置绘制的最顶部像素的“深度”。当您尝试在该位置绘制另一个像素时,如果它的深度值高于当前缓冲区中的值,它将被绘制到颜色缓冲区,并且其深度值将替换深度缓冲区中的值。但是,如果另一个像素的深度值低于缓冲区中的值 - 它不会被绘制并且深度缓冲区中的值保持不变。
这样做的结果是深度缓冲区不能按预期使用透明像素。透明像素可能只会导致颜色缓冲区的部分变化 - 但它会完全替换深度缓冲区中的值。没有办法在它“下”画。
有两种方法可以解决这个问题:
您可以使用alpha testing,这会导致透明像素根本不被渲染(并且不会更改深度缓冲区)。这允许几何图形通过透明区域显示,与绘制顺序无关。缺点是这不适用于抗锯齿(这里对抗锯齿选项进行了很好的讨论)。
或者您可以按从后到前的顺序对几何图形进行排序。如果您先绘制不透明几何图形,则只需对透明几何图形进行排序。