变换和光照
网格数据提交到API之后,接下来就是变换和光照(常用T&L表示)。这个阶段包含大量顶点级别的计算,常见的操作如下:
- 物体空间顶点位置变换到裁剪空间
- 使用光照设置及法向量计算光照
- 根据顶点位置计算顶点几雾浓度
- 阶段式产生纹理裁剪坐标
- 在骨骼动画中,用skinning技术计算顶点值
当然,渲染上下文、提交数据不同,有些操作也不会执行
变换到裁剪空间
空间之间的转换常用矩阵乘法实现,转换顺序如下:
- 将模型从模型空间转换为世界空间
- 从世界空间转换到摄像机空间
- 从摄像机空间转换到裁剪空间
实际上,变换矩阵是已经连接好的,可能是一个矩阵或两个矩阵
顶点光照
理想情况下应该使用Phong着色,但是实际中使用最多的是Gouraud着色。由于mdiff不是一个顶点级材质属性,它的值通常由纹理定义,因此无法直接使用光照合成公式
因此我们做一下变换,分离出mdiff
那么对于每个顶点,有
- vdiff表示环境和散射分量
- vspec表示镜面分量
于是有
其中mspec经常为常数
应使用哪个坐标空间计算光照?可以在世界空间中进行