第三章 Hanging Ten——走马观花渲染管道
现在是时候开始在三维里思考了。目前为止我们做的任何事情都是二维的。这一章讲述传统3D渲染流水线的背景知识。我特别指出“传统”,那是因为当前有两种渲染流水线:传统的fixed-function流水线和vertex and pixel shader流水线。传统流水线包括下面的步骤:
n 顶点数据和高阶图元(high-order primitive tessellation)
n 变换和光照
n 视口和裁剪
n 纹理/多重纹理
n 雾混合
n 透明,模板和深度测试
n 帧缓存混合
DirectX 8加入了vertex和pixel shaders,他们使用一种类汇编语言的shader语言。Vertex shaders代替了流水线里的变换和光照步骤,pixel shaders代替了纹理/多重纹理步骤。在DirectX 9里,使用了C语言语法风格的高级着色语言(High Level Shader Language)替代了类汇编语言的shader语言。几章都会用到(devoted)这些shaders。在这本书里我们不会深入专研shaders的高级特性,我们坚持使用传统的流水线,在处理vertex and pixel shaders之前,我们需要扎实的掌握这些技术。
很多传统的流水线在现代图形卡都得到支持。这一章我们把焦点集中在准备mesh数据和把数据送给硬件渲染的处理上。事实上,这一章大多数内容解决精确定义哪些顶点数据需要提交进行渲染,以及这些数据怎么组织。为了在3D渲染取得最高的效率,我们需要最小化渲染状态的改变(例如,纹理选择,光照设置,变换矩阵的设定)。