OpenGL-背面剔除深度测试
分类:
文章
•
2024-12-13 14:29:46
一、进行创建
用一个最简单的案例来说明下这两个技术吧。首先,我们可以使用GLTools里面的gltMakeTorus函数来为我们去创建一个类似于甜甜圈的模型。
二、解释说明
当我们不旋转的时候创建的模型是这样的

三、旋转之后

我们发现,为什么一旋转就会出现黑边?那是因为一些远端三角形绘制在了近端三角形上,为什么这么说因为三角形的背面其实是黑色的,为什么是黑色?因为这个模型就是这么设定的,然后我们一旋转可能就会导致重新渲染的时候三角形的的绘制顺序出错。
所以我们就可以看到了背面。这个时候我们可以采取背面剔除的方法来解决这个问题。当然还有种方法就是油画法,但是油画法在计算机的图形处理当中的效率是很低的,因为我们必须对任何发送在几何图形重叠地方的每个像素要进行两次绘制,以及我们还需要去对这些三角形进行排序来绘制。
所以如果我们在绘制图形的时候由于顺序问题而导致了立体图形出现了一些问题我们可以去采用表面剔除去进行处理。如果我们重叠问题最好使用深度测试。
四、采用背面剔除

产生了一些重叠问题,但是消除了背面三角形的问题,因为在渲染的图元装配的阶段就整体的抛弃了一些三角形进行了处理。
四、开启深度测试之后

解决了刚才的问题。深度测试的原理可以归结为一句话,就是先绘制离观察者近的,有重叠的比较一下z值,然后每次都保留离观察者最近的那个像素。
这里再解释一下为什么说这个模型,三角形的背面就是黑色的因为如果我们调整多边形的渲染模式为点模式的话其实就会发现背面确实是黑色的。

在这里使用背面剔除只能解决三角形本身的顺序问题,而不能解决三角形的重叠问题