OpenGL 深度测试与精度值的那些事

避免图片丢失,建议阅读微信原文:

https://mp.weixin.qq.com/s/PpLzxm7hPHDbaQLmAniCzQ

在 OpenGL 世界里,使用深度测试可以来防止被阻挡的面渲染到其他面的前面。

直接看一个没有使用深度测试的绘制:

未开启深度测试的情况

按照计划是绘制一个封闭的立方体,六个面都是有的,可从上面的效果来看并不是,立方体的有些面丢失了,只有后面的那个面,前面的面没了。

这就是在没有开启深度测试的情况下,本来应该被遮挡的,绘制在后面的面却绘制到了其他面之上。

要解决这种问题,就得使用深度测试了。

[Read More]

《OpenGL ES 3.x 游戏开发》顶点缓冲区 VBO 的使用

学习笔记内容摘录

在之前的绘制过程中,首先都需要将物体的顶点数据保存在内存中,然后 glDrawArraysglDrawElements 绘制前,将顶点数据送入到显存中,这样会存在 I/O 开销较大的问题,性能也不够好。

可以将顶点数据存放在顶点缓冲区中,就不需要在每次绘制前把顶点数据复制进显存,而是在初始化顶点缓冲区对象时一次性将顶点数据送入显存,每次绘制时直接使用显存中的数据,可以大大提高渲染性能。

[Read More]

《OpenGL ES 3.x 游戏开发》之颜色混合和使用

学习笔记内容摘录

避免图片丢失,建议阅读微信原文:

https://mp.weixin.qq.com/s/40ss1fbLh3Qr5X4o76GTjA

在 Android 中有一个类 PorterDuffXfermode ,它是用来设置颜色混合方式的,也就是在已有颜色的基础上再绘制一笔颜色,这两个颜色是如何进行混合的,是新绘制的颜色覆盖了原有颜色,还是新绘制的颜色和原有颜色混合组成另一种颜色呢。

在 OpenGL 中同样有这样颜色混合的问题。

[Read More]

《OpenGL ES 3.x 游戏开发》之利用 Alpha 透明度进行测试

学习笔记内容摘录

在前面的博客文章中有提到 OpenGL 裁剪测试及注意点,并且裁剪测试只能裁剪一个矩形区域,相当于就是把整个内容都绘制上去了,但是透过一个小矩形区域来看绘制的物体。

除了透过矩形区域,还可以实现透过任意形状区域来观察物体,这就是要用到 OpenGL 的 Alpha 透明度测试。

关于 Alpha 透明度测试,在 用 OpenGL 对视频帧内容进行替换 也用实践用到过。

[Read More]