OpenGL的一些名词的理解
1. 着色器
将点线和三角形从创建的3d空间投影到计算机屏幕上的的2d图形是着色器的工作
顶点着色器主要做的是对客户输入的数据进行应用变换,光照效果和位移等一些等数学运算,我们可以理解为顶点着色器做的是将数学数据或图片数据用坐标的形式描绘出2d或3d的图形,是通过坐标点对像素进行的操作。
片段着色器做的将顶点着色器输出的数据模型,进行光栅化,也就是对点之间的像素进行颜色填充。
如果说我们盖一座房屋,片段着色器做的是对房屋的建设,而片段着色器是对其粉刷。
2. 属性
任何事物都具有属性,比如说人的身高和体重就是属性,而当我们对顶点做出改变时,就是对其顶点的某个属性进行其改变。
2. uniform值
属性是不变的,而uniform值是可变的,当我们对顶点某个属性进行改变时,比如说是颜色,这是就要指定改变的数值,这个数值就是uniform值。
3. 纹理
图片在计算机上是已像素的形式显示的,而每个像素都以rgba的形式展示的,而rgba是可以通过浮点数进行标记的,而纹理就是对这些浮点数的提取,或者说是拖欠的某段像素。
4. 输出
输出是某阶段着色器数学运算后输出的数据,也是作为应用到下一阶段的输入
5. 正投影和透视投影
目前浅显的理解为对视觉上看到的部分进行投影,比如说一个立方体最多可以看到七个点。如果将点投影到屏幕我们通过正投影会投影七个点,透视投影是可以将看不到的点投影到屏幕上的,手法是通过一个头椎体(放到的金字塔,并且去掉头部一部分)的方式,相邻两点距离视点近小远大。
而投影的作用是将视觉坐标转换成剪裁坐标,也就是通过投影矩阵运算后是可以剔除剪裁区之外的数据。
6. 正面或背面剔除
当我们绘制很多实体三角形时如果没有做顺序标记先后顺序时,就可以出现较远的三角形出现在前面的现象,而坐顺序标记这种做法也是不可取的,因为同一片段多次绘制,和标记所带来的内存开销,都是很影响性能的,这时候我们可以用背部剔除的方式实现。简单的说只去绘制我们视觉能看到的实体三角性,而看不到的地方是不绘制的。正面剔除反之亦然。
7. 深度测试
背部剔除做到了多次绘制同一xy坐标而z坐标不同造成的重叠现象,深度测试也可以做到这一点,简单说是在z轴上当前像素的坐标前面是否有别的像素坐标,如果别的像素坐标在其前面,那它就不会绘制,也就是说, 只绘制最前面的坐标。
8. 多边形模式
可以绘制允许用点的面,轮廓,或点绘制多边形,也可以将结果加在正面或反面。
9. 多边形偏移
有时候借用深度测试实现多边形剔除,但是有时当这个所谓深度很小时,这是深度测试可能会检测错误,这样造成绘制上的错误。这是我们可以适当的对齐深度放大,以便深度测试可以正常工作,这种方式可以称为多边形偏移。
10. 剪裁
为了提高渲染效率,我们其实不用将整个屏幕的像素点都要刷新,只要对其剪裁区,也就是我们看到的视口区,进行像素刷新操作就可以了。
11. 混合
有时候我们需要看到叠加在一起的实体三角形的效果,这时候就不能剔除了,但也不能遮挡,这时候就要混合其效果了。
12. 抗锯齿
像素点放大看其实是类似正方体的,如果要显示更加逼真的效果我们就要将锯齿淡化,显示的更圆润一些。其原理是混合操作,将像素要的目标颜色与周边的源颜色进行混合,以淡化锯齿。
13. 多重采样
当纵深有很多实体图元时,这时候混合这种模式抗锯齿的效果不是很好。因为混合模式的抗锯齿操作是基于混合的原理,这样是要对其前后进行标记告诉是哪个图元要进行混合的数学运算的。这样做是很麻烦的。多重采样方便了这种处理,将所有显示的图元像素 多次采样存储在缓存区里,当有像素刷新时这时会对其像素进行解析,已产生一个单独的值显示。但这种操作是耗性能的,而多重采样是不能对点和线进行抗锯齿的,或者说抗锯齿的效果没有平滑处理的好,但是打开或者关闭OpenGL特性将会修改驱动程序的内部状态,这样对性能是有影响的,对于对性能敏锐的程序员,会不辞辛苦的对图元进行排序,以此都采用平滑抗锯齿来提高性能。