在OpenGL固定管线中,通过 glLight...(GL_LIGHTi,GL_POSITION,vLightPos) 与 glVertex(vVertexPos) 来设置光源与顶点的位置。这里存在一个比较容易混淆的问题,虽然二者在图形管线中都需要经过世界坐标系再到视觉坐标系的变换,但注意有一点是不同的。
诚然固定管线这都是被bs的历史遗产了。。。但是弄清楚历史遗留问题,个人觉得还是有那么点必要的:
-
对于顶点数据而言,无论应用程序员在代码中哪个部分提交它的位置属性,它都必须经历glulookat函数定义的视图变换。
-
对于光源,则有些不同了,如果提交光源位置时,没有定义视觉坐标系变换(即是没有调用glulookat函数),那么最终绘制效果里,光源将会随着眼睛的位置改变而改变;如果提交光源位置时,已经call了glulookat函数,那么光源将不会随眼睛位置改变而变化。