OpenGL ES 3D 渲染:Z 缓冲、混合与 3D 网格的应用
1. Z 缓冲的工作原理
在 OpenGL ES 的 3D 渲染里,Z 缓冲是一个关键概念。它的主要作用是判定哪些像素该显示在前面,哪些该显示在后面。具体而言,OpenGL ES 会把新像素的深度值和 Z 缓冲里已有的像素深度值进行比较。要是新像素的深度值更小,那就表明这个像素离近裁剪面更近,会显示在帧缓冲和 Z 缓冲里已有像素的前面。
Z 缓冲初始时,所有值都被设为无穷大(或者一个很大的数)。当渲染第一个三角形时,会把它每个像素的深度值和 Z 缓冲里对应像素的值作比较。若像素的深度值小于 Z 缓冲里的值,这个像素就通过了深度测试(也叫 Z 测试),其颜色会被写入帧缓冲,深度值会覆盖 Z 缓冲里的对应值;若没通过测试,像素的颜色和深度值都不会被写入缓冲。
每帧都得清空 Z 缓冲,不然上一帧的深度值还会留在里面。可以使用 glClear() 方法来实现,代码如下:
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
这样就能一次性清空帧缓冲(也叫颜色缓冲)和 Z 缓冲(也叫深度缓冲)。
2. 利用 Z 缓冲修复之前的示例
为了修复之前示例里的问题,我们可以使用 Z 缓冲。把代码复制到一个新类 ZBufferTest 里,然后修改 ZBufferScreen 类的 present(
超级会员免费看
订阅专栏 解锁全文
9022

被折叠的 条评论
为什么被折叠?



