渲染管线总图
顶点着色器
顶点着色器作为管线的第一个阶段,它的作用其实很简单,就是接收外界输入的数据。这些数据是渲染图形必不可少的,所以说顶点着色器是管线中必需的一个阶段。并且数据可以传递到下一个着色器中。
细分曲面控制着色器
1.细分曲面控制着色器的数据从顶点着色器中获取,顶点着色器将数据作为输出,细分曲面控制着色器作为输入进行获取
细分曲面控制着色器的任务:
1.确定即将发送到细分曲面引擎的细分曲面级数(就是要将图形分成多少块的意思)
2.同时将生成的数据发往细分曲面评估着色器
着色器的工作原理:
将高阶面,也就是所谓的贴片(patch)
分解成点、线或者三角形
细分曲面引擎
细分曲面引擎是OpenGL管线的
固定部分
,主要接收以贴片为代表的高阶面并将这些面分解成更简单的基元,比如点、线或三角形。
细分曲面控制着色器传入
控制点并且设置贴片使用的细分曲面因子
细分曲面引擎生成输出
基元
细分曲面评估着色器会获取这些基元的顶点
细分曲面评估着色器
细分曲面评估着色器
接收
细分曲面引擎输出的顶点,对其进行运行调用
。其实就是再次使用这些顶点,可以自己写算法进行计算。
几何着色器
目前,我还不理解什么意思。。。下次再补充
基元装配
固定阶段,就是把顶点合成线或者三角形
裁剪
顶点存在于管线的前端,其所处的位置就是
裁剪位置
。
前端输出的是四分量齐次坐标,但裁剪发生在笛卡尔坐标空间中。因此,为了从齐次坐标转换为笛卡尔坐标,OpenGL执行了透视分割,即把所有位置四分量用最后一个w分量进行分割,w为1.0。
投影分割后产生的位置在标准化设备空间中。x轴和y轴的范围是-1.0到1.0,z轴的范围0.0到1.0。用户可以看到在此区域内包含的任何几何图形,范围外的被丢弃。
范围外的被丢弃:
剔除
可以确定三角形是面向观察者还是背向观察者,并根据计算结果决定是否实际进行绘制。
剔除是可以手动开启的,好像默认不开启吧。
光栅化
指哪些片段可被线或三角形等基元覆盖的过程。就是哪些片段可以呈现在屏幕上。
片段着色器
光栅化处理基元后,会产生一个需要着色的片段列表并且将该列表传递给片段着色器
片段着色器就是确定各个片段的颜色,然后将片段发送到帧缓存中去。
帧缓存
帧缓存表示屏幕的可见内容,以及用于存储颜色以外每个像素值的其他内存区域