1.1 光照计算发生在图形流水线的Vertex Operations中,只计算每个顶点的颜色,而三角形内部的点的颜色在Fragment Operations阶段通计算,这样效率高,因为像素的数量远远大于顶点的数量。

1.2 计算三角形内每个像素的颜色的过程,称为shading,也称明暗处理、着色。几种常见处理方法有:
1.3 常数明暗处理
每个面片内所有像素都取同样的颜色,颜色来源于某个顶点的颜色。即对每个多边形只计算一个光照强度,然后用此值作为整个多边形平面的明暗值赋给多边形的每个像素,使多边形的每个点都具有相同的明暗度。

1.4 Gouraud 明暗处理
采用双线性插值的方式计算面片内像素的颜色,具体为:

双线性插值发生在光栅化阶段,会对多边形进行扫描转换,此时正好就可以再扫描过程中对每个片元进行双线性插值。

顶点层次处理的对象是顶点,Fragment operations阶段处理的是片元(像素)。
1.5 在OpenGL中,主要分为Flat Shading和Smooth Shading。

1.6 Gouraud 明暗处理问题


1.7 Phong 明暗处理
主要思想是不插值光亮度颜色,而是插值法向量,因此也称为“法向量插值明暗处理”。对多边形顶点处法向量做双线性插值,将插值计算得到得多边形内各片元得法向量带入光亮度计算公式,得到各片元得光亮度。


1.8 各明暗处理方法效果


1.9 其他明暗处理方法

1.20 OpenGL中只支持常数明暗处理和Gouraud 明暗处理,Phong Shading需要shader编程实现。
glShadeModel(GLenum mode);