2.3.2 可选择的顶点处理
1)细分曲面阶段 tessellation
作用:可根据模型距离摄像机远近产生不同数量的patch
2)几何着色器阶段 geometry shader
作用:制作粒子特效
3)流输出阶段 stream output
作用:粒子模拟
2.4 光栅化阶段(扫描转换)
作用:找出三角形(点或线)覆盖的所有像素点。把屏幕空间的二维顶点转换到屏幕像素上。
分为两个子阶段:三角形设置、三角形遍历。
如何判断像素是否被三角形覆盖:点采样
a)单点采样,查看像素中心点是否在三角形之内。
b)supersample和multisample
c)判断像素的至少百分之多少在三角形内
2.4.1 三角形设置
作用:处理三角形的渲染数据
2.4.2 三角形遍历
作用:遍历找出哪些像素是在三角形内,并且把这些像素生成片段(fragment)。所有在三角形内部的像素被传到下一阶段-像素处理阶段
2.5 像素处理阶段
2.5.1 像素Shading
作用:用差值的shading 数据(法线、顶点位置、颜色、光照等)作为输入,对每个片元都产生一个或多个颜色。这一阶段最重要的技术是贴图,将一维、二维、三维图片黏贴到物体上。
2.5.2 融合
1)作用:每个像素都有一个颜色缓冲和一个深度缓冲,渲染一个三角形,将其z值与深度缓冲里存的深度值进行比较,如果比深度缓冲里的Z更小,则把三角形的颜色与颜色缓冲存储颜色值相融合。透明物体需要等到所有不透明物体渲染完后再渲染才能产生正确的颜色值。
2)除了上面两种缓冲外,还有模板缓冲。
作用:记录被渲染图元在屏幕上的位置。深度缓冲是通过比较深度值进行取舍。模板缓冲是通过自定义其他函数对已经渲染进模板缓冲的图元数据进行取舍,从而决定图元是否传入颜色缓冲和深度缓冲。例如UI滑动列表内元素如果有透明物体,在滑动出滑动列表后,还会显示,就需要用模板实现画出区域的不渲染。
3)累计缓存。
作用:OpenGL除了颜色缓冲区、深度缓冲区、模板缓冲区之外,还有累积缓冲区。累积缓冲区允许你把渲染到颜色缓冲区的值,拷贝到累积缓冲区。在多次拷贝操作到累积缓冲区时,可以用不同方式的把颜色缓冲区内容和当前累积缓冲区的内容进行重复混合。当在累积缓冲区完成一幅图像之后,可以拷回颜色缓冲区,然后通过SwapBuffers显示到屏幕上。
总结:帧缓存:所有的缓冲结合起来就是帧缓存。
帧缓存用了双重缓冲技术,保证back buffer全部渲染完成后,替换到front buffer上。