【安卓开发系列 -- APP】OPENGL ES -- 剪裁与测试

【1】剪裁测试

剪裁测试主要用来在渲染场景时限制绘制区域,用其可以方便地实现同时在屏幕上绘制主视角与次视角场景;
剪裁测试可以在渲染时用来限制绘制区域,通过此技术可以在屏幕(帧缓冲)上指定一个矩形区域,启用剪裁测试后,绘制将不会在整个屏幕(帧缓冲)中进行,而是仅在指定的矩形区域中进行;不在此矩形区域内的片元将被丢弃,只有在此矩形区域内的片元才有机会最终进入帧缓冲;

【2】Alpha 测试

OpenGL ES 中每个颜色有 4 个色彩通道即 RGBA,其中的 A 就是 Alpha(透明度)通道;在进行混合模式绘制时可以通过特定的混合因子使用 Alpha 通道值执行混合操作;
Alpha 测试的基本原理,当绘制一个片元时,首先检测其 Alpha 值,若 Alpha 值满足要求,则通过测试并绘制此片元,否则丢弃此片元不进行绘制;

【3】模板测试

模板测试就是通过模板缓冲中记录的模板信息实现的,具体来说就是渲染管线在模板缓冲区中为每个位置的片元保存了一个“模板值”,当像素需要进行模板测试时,将设定的模板参考值与该片元对应位置的模板值进行比较,符合条件的片元通过测试,不符合条件的则被丢弃,不进行渲染;

【4】任意平面裁剪

实际开发中会有这样的需求,仅绘制某一特定平面所确定半空间中的物体部分,其他部分不予绘制,就像物体被切掉了一部分一样;
实现步骤
1. 给出用于定义剪裁平面的 4 个参数 A、B、C、D,这 4 个参数分别是平面解析方程(Ax+By+Cz+D=0)中的 4 个系数;
2. 将剪裁平面的 4 个参数传入渲染管线,以备着色器使用;
3. 在顶点着色器中判断顶点是否在平面的某一侧,具体的方法为,将顶点位置(x0,y0,z0)代入平面方程 Ax+By+Cz+D=0,完成计算后将得到的值传入片元着色器;
4. 片元着色器中根据接收到的 Ax0+By0+Cz0+D 表达式的值与 0 之间的关系就可以得出顶点与剪裁平面之间的位置关系,以决定是否丢弃片元;即若 Ax0+By0+Cz0+D>0,则顶点在平面的一侧,反之在平面的另一侧;

参考
本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】OpenGL ES 3.x 游戏开发

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐