隐藏面消除[Hidden surface elimination]
油画算法
1、油画算法:先绘制场景中的离观察者较远的物体,再绘制较近的物体.
2、油画算法弊端:使⽤油画算法,只要将场景按照物理距离观察者的距离远近排序,由远及近的绘制即可.那么会出现什么问题? 如果三个三角形是叠加的情况,油画算法将⽆法处理.正背面剔除[Face Culling]
1、OpenGL 可以做到检查所有正⾯朝向观察者的面,并渲染它们.从而丢弃背面朝向的面. 这样可以节约⽚元着⾊色器的性能.正面/背面区分
1、正面:按照逆时针顶点连接顺序的三角形面
2、背面:按照顺时针顶点连接顺序的三角形面深度
1、什么是深度? 深度其实就是该像素点在3D世界中距离摄像机的距离,Z值
2、什么是深度缓冲区? 深度缓存区,就是⼀块内存区域,专门存储着每个像素点(绘制在屏幕上的)深度值.深度值(Z值)越大, 则离摄像机就越远.
3、为什么需要深度缓冲区? 在不使⽤深度测试的时候,如果我们先绘制⼀个距离⽐较近的物理,再绘制距离较远的物理,则距离远的位图因为后绘制,会把距离近的物体覆盖掉. 有了深度缓冲区后,绘制物体的顺序就不那么重要的. 实际上,只要存在深度缓冲区,OpenGL 都会把像素的深度值写入到缓冲区中. 除非调用glDepthMask(GL_FALSE).来禁⽌写入.Z-buffer方法(深度缓冲区Depth-buffer)
深度缓冲区(DepthBuffer)和颜⾊缓存区(ColorBuffer)是对应的.颜⾊缓存区存储像素的颜色信息,⽽深度缓冲区存储像素的深度信息. 在决定是否绘制⼀个物体表⾯时, ⾸先要将表面对应的像素的深度值与当前深度缓冲区中的值进行比较. 如果⼤于深度缓冲区中的值,则丢弃这部分.否则 利用这个像素对应的深度值和颜色值.分别更新深度缓冲区和颜色缓存区. 这个过程称为”深度测试”
.......
- 裁剪
- 窗口、视口、裁剪区域
- 混合
- 组合颜色
1、目标颜色:已经存储在颜⾊缓存区的颜⾊值
2、源颜色:作为当前渲染命令结果进入颜⾊缓存区的颜色值
3、当混合功能被启动时,源颜⾊和⽬标颜色的组合⽅式是混合方程式控制的。在默认情况下,混合⽅程式如下所示:Cf = (Cs * S) + (Cd * D)
Cf :最终计算参数的颜色 Cs : 源颜色 Cd :⽬标颜色 S:源混合因子 D:⽬标混合因子 - 设置混合因⼦
1、设置混合因子,需要⽤用到glBlendFun函数glBlendFunc(GLenum S,GLenum D);
S:源混合因子 D:目标混合因子
......
- 常量混合颜色