48、OpenGL ES 3D 渲染:Z 缓冲、混合与 3D 网格的应用

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(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值