OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13
文章目录
上一篇介绍了一下有关片段着色器的相关内容(虽然还有未解决的问题),这一篇我们将介绍图形管线的最后一部分,帧缓存运算,还介绍一下一个单独形成管线的着色器:计算着色器。
1 帧缓存运算
帧缓存是OpenGL管线的最后一个阶段,我们可以把渲染的图像传输给窗口的帧缓存中去,这样我们就能看到绘制的图形了,如果我们需要渲染到屏幕以外的地方(以后的有些计算需要我们这样做),那我们就要提供自己的缓存。
当然在这个环节中,即在写入窗口前我们还要进行很多的筛选和计算,主要是分为4步:裁剪测试,模板测试,深度测试,混合和逻辑运算阶段。
1.1 裁剪测试
我们可以通过设置一个矩形,当像素在矩形外的话,我们就把这些像素丢弃,如果像素在矩形内,那么它的值将会继续进行之后的运算。
1.2 模板测试
这一步的时候我们将比较我们设置的参照值和模板缓存之间的大小。
1.3 深度测试
这是一个非常重要的环节,还记得之前我们在剔除中进行的计算吗,通过计算三角形的正反(向量叉积)来剔除一些不用绘制的三角形。但是我们无法解决前面的三角形挡住了后面三角形的正面这种情况,当时我们提到要用深度测试,而这里就要进行深度测试。
深度测试就是在绘制三角形的像素时判断一下,该三角形在该像素上的深度(Z值)是多少,如果比缓存中的小,那么将该像素的信息覆盖在上面。
比如说我先画一个三角形:
这里标出了每个像素对应的深度图
观察到第一个绘制的三角形是位于Z=0.5平面上的,所以每个像素的深度值现在是0.5(在三角形区域中的像素)。
在绘制第二个三角形时,运行到深度测试的时候,在重叠部分,蓝色的三角形的深度是小于红色的,所以在重叠的区域红色的三角形被蓝色三角形覆盖。虽然显示的是蓝色完全盖住了重叠的区域,但深度测试是逐像素进行的&