法线向量的设置也是状态,设置顶点时候会用最近的法线向量。
glBegin(xxx);
glNormal3fv(vn0);
glVertex3fv(v0);
glNormal3fv(vn1);
glVertex3fv(v1);
glEnd();
计算光照前需要对法向量进行单位化。
1).如果一开始就是单位向量,后面只是进行平移和旋转,那么法向量不需要重新计算,也不需要重新规范化。
2).glEnable(GL_RESCALE_NORMAL) 对于开始有规范化的法向量,其中进行了均匀缩放的,那么需用GL_RESCALE_NORMAL重新规范化法向量,会比
GL_NORMALIZE更快。
如果是单位化了的法线向量(例如3ds max中导出的法线贴图),那么模型均匀缩放后,可以用GL_RESCALE_NORMAL重新规范化法向量。
3).glEnable(GL_NORMALIZE) 对于开始没有规范化的法向量,或者网格进行了非均匀缩放,那么需要重新程序员手动计算法向量的值(不要轻易非均匀缩放),且要进行GL_NORMALIZE规范化法向量。
Name
glNormal — set the current normal vector
C Specification
void glNormal3b |