- 其实OpenGL的流水线,对我学习来说只能算是一个概念性的东西。毕竟OpenGL也在发展,流水线也不会是一成不变的。
- 不过理解流水线的过程,重点在于理解每一步的作用,进而可以如何衔接起来,完成整个绘制图像的工作。顺序不一定相同,但仍能完成工作,但效率上肯定会有差。
状态机
- 在OpenGL中,我们输入的总是
- “顶点”
- 但同时我们也会改变许多
- “状态”
- 比如
- 当前顶点颜色glColor
- 当前顶点的法向量glNormal
- 当前相机的位置、朝向、正向gluLookAt
- 作用于当前 顶点 的旋转、平移、缩放效果
- ……
- 所以我们叫OpenGL是一个状态机,因为你输入的每一个顶点数据,在那一行代码的时刻就有各种各样的状态对应着这个顶点,而这个顶点也必须经过这些状态的变化后,才是最终你所希望绘制的顶点
流水线的工作过程
- 所以我们有了什么?
- 世界坐标系下的一堆顶点数据
- 每个顶点所对应的各种状态变量
- 其他内容如视景体、视口……
- 想象一下如何生成最后的图像
- 对于顶点,我们需要把各种状态作用在上面,比如你设置的颜色、光照模型下这个顶点应该是什么颜色、进行的旋转等变换、顶点相对于相机的坐标、如果有透视效果会让顶点的坐标发生偏转,,,,,,之后才算