1)OpenGL的ModelView矩阵是对三维模型的操作【模型变换】,包括平移、旋转、放缩,但我们 也可以理解为对相机的一种操作【视图变换】,或者理解为对视点的一种操作。由于视图变换和模型变换存在着对偶特性,本质上是一致的。一种比较有效的思考方法是,视点始终在(0,0,0)处,【glLoadIndentity()默认会使得相机在(0,0,0)坐标位置处】,而在透视投影中,观察者是从原点向Z轴的负方向看过去(垂直“穿入”监视器屏幕),要保证模型可见,所以要进行模型视图变换
2)三维变换本质上有四种变换:视图变换,模型变换,投影变换,视口变换;但是在OpenGL中,只有三种变换:模型视图变换、投影变换、视口变换。其将视图变换和模型变换进行了合并,在设置不同的变换矩阵的时候,要记得glMatrixMode调用。另外值得注意的是ModelView的12,13,14元素反映的是视图变换的平移量,如果要理解为模型变换,则需要加上负号考虑,默认配置为模型变换(也就是说,用gltranslate**的时候,opengl会默认将矩阵加上负号处理,但如果我们直接操作矩阵的时候,要注意正量为视图变换,加负号为模型变换)。
3)OpenGL的projection矩阵设置投影关系
4)要正确的设置鼠标的操作需要定义好一个旋转球
5) 有关OpenGL的光照设置,可以参看这个链接http://blog.sina.com.cn/s/blog_40b056950100govp.html
6)之所以光照一开始设置不对,有几个方面的原因,一是没有使用glEnable(GL_NORMALIZE)命令,二是对于坐标的运算有误
7)光照的位置与modelview有关,因此,设置光照位置的时候,不要忘记设置modelview,或者说,只有在正确设置好modelview之后,才可以设置光照的位置,即调用glLightfv函数
9)ModelViewMatirx是 列主序的矩阵
10)OpenGL的glMultMatrixd矩阵相乘是 右乘关系,如glMultMatrixd(A);glMultMatrixd(B) ===> 通过glGetDoublev(GL_MODELVIEW_MATRIX, C)得到的矩阵是C=A*B
11)要正确的找到鼠标的旋转中心需要进行如下的操作: 设置模型对应的相机参数, 找到模型的中心点,根据模型的中心点求取旋转中心。