如何在渲染时以正确的顺序绘制形状?

时间:2015-08-13 17:49:25

标签: graphics 3d rendering

我正在尝试编写一个3D图形引擎,但是我在按正确的顺序绘制形状时遇到了一些麻烦。

当我将三角形的点转换为窗口空间,即直接与屏幕上的位置相关的二维空间时,除了每个点的x和y位置之外,我还为它们分配了一个存储的深度变量离观众有多远,这个点在3d空间中。

目前,我渲染的唯一形状是三角形。我当前的渲染顺序算法按三个点的平均深度对三角形进行排序。我知道当我开始它时它不完美,但我想要一个占位符进行测试。

出于测试目的,我构造了一个带有顶部开口的方框,每个边都是不同的颜色,由2个三角形组成,如下所示: enter image description here

从上图中可以看出,我使用的算法大部分时间都在工作。但是,在某些角度和位置,三角形将以错误的顺序呈现,如下所示:

enter image description here

如您所见,盒子底部的一个青色三角形正在侧面的一个黄色三角形之前绘制。显然,按照点的平均深度对三角形进行排序并不令人满意。

是否有更好的方法来排序形状,以便以正确的顺序呈现它们?

1 个答案:

答案 0 :(得分:1)

以正确的深度顺序绘制3D的标准方法是使用Z-buffer

基本上,我们的想法是,对于您在颜色缓冲区中设置的每个像素,您还要在z(深度..)缓冲区中设置它的插值深度。每当您要绘制下一个像素时,首先检查z缓冲区是否在已经绘制的像素前面验证新像素。

除此之外,您还可以添加各种优化,例如排序三角形,以最大限度地减少实际绘制颜色缓冲区的次数。

另一方面,为了正确处理透明度或其他“高级”效果,有时需要完全相反。