裁剪
- 裁剪:在OpenGL 中提⾼渲染的一种方式.只刷新屏幕上发⽣变化的部分.OpenGL 允许将要进行渲染的窗口只去指定一个裁剪框.
-
基本原理:⽤于渲染时限制绘制区域,通过此技术可以在屏幕(帧缓冲)指定一个矩形区域。启用剪裁测试之后,不在此矩形区域内的⽚元被丢弃,只有在此矩形区域内的片元才有可能进入帧缓冲。因此实际达到的效果就是在屏幕上开辟了了⼀个⼩窗口,可以在其中进⾏指定内容的绘制。
开启裁剪测试
glEnable(GL_SCISSOR_TEST);
关闭裁剪测试
glDisable(GL_SCISSOR_TEST);
指定裁剪窗⼝
x,y:指定裁剪框左下角位置; width , height:指定裁剪尺寸
void glScissor(Glint x,Glint y,GLSize width,GLSize height);
混合
- 混合:OpenGL渲染时会把颜色值存在颜色缓存区中,每个⽚段的深度值是放在深度缓冲区。当深度缓冲区被关闭时,新的颜色将简单的覆盖原来颜色缓存区存在的颜色值,当深度缓冲区再次打开时,新的颜色片段只有当它们比原来的值更接近邻近的裁剪平面会替换原来的颜⾊片段。
根据使用场景的不同,混合有两种方式:
1.开关混合:单纯的两个图层混合
//开启混合
glEnable(GL_BLEND);
//关闭混合
glDisable(GL_BLEND);
2.开关混合+混合方程式:(滤镜效果)带有半透明的图层混合,或者是不存在图层单纯的两种颜色混合
- ⽬标颜⾊:已经存储在颜色缓存区的颜色值
- 源颜色:作为当前渲染命令结果进入颜⾊缓存区的颜色值
设置混合因子
//S:源混合因⼦子 D:⽬目标混合因⼦子
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
总结:
在混合方程中,源颜色(最上面的图层)的alpha值越高,添加的新颜色成分就越高,旧颜色值就保留的越少
混合函数经常用于实现在其他一些不透明的物体前面绘制一个透明物体的效果。
完整demo