笔记补充
3.2.4视点变换和模型变换
在OpenGL中,视点变换和模型变换被当做一种变换来看待。改变视点的位置和改变模型的位置是一个相对的过程,例如将物体从(0.0, 0.0, 0.0)移至(0.0, 0.0, -1.0)相当于将相机从(0.0, 0.0, 0.0)移至(0.0, 0.0, 1.0)。视点变换、模型变换将被合并,形成模型视点矩阵。
可以使用函数glMatrixMode(GL_MODELVIEW)来指定当前矩阵模式为模型视点变换。在代码中,视点变换在模型变换之前指定,但投影变换和视口变换可以在绘图之前的任意时候指定。
一些建议:
(1)视点变换采用gluLookAt来改变相机的位置,朝向以及向上方向。
(2)模型变换使用glTranslate, glRotate, glScale来进行平移,旋转,缩放反射,从而改变物体在场景中位置。
3.2.5全局变换和局部变换
1.Global transformation (全局坐标系变换模式,固定坐标系模式,图形模式)
①全局变换主要是在全局坐标系,也叫世界坐标系中进行变换,基本是定死的,如下图的第一行变换就是全局变换,正方形在xyz坐标系中,先想(10,0,0)方向平移10,再绕z轴旋转45°
②局部变换主要是在局部坐标系,也叫模型坐标系,就是字面意思模型自己的坐标,如下图第二行,第三行变换,当我们以局部坐标系对正方形进行先平移,后旋转的操作时,会发现和全局变换的结果有区别,但是当我们反过来,先旋转,再平移变换,所达到的结果和全局变换的效果一致
2.Local transformation (局部坐标系变换模式,活动坐标系模式,空间模式
为什么需要局部变换?
全局变换适用于整个模型的变换,当我们涉及到模型的部分组件变换的时候,以模型坐标系作为变换的计算更为便捷。例如:但我们场景中有一个机器人时,机器人整体的行走,跑动等位移,我们可以用全局变换,去看机器人跑动了多远。但是当机器人跑动的时候,手臂,脚的摆动角度,高度这些,我们如果用全局变换去计算会变得非常麻烦,但是当我们以模型坐标系去定位,机器人手脚的位置,这样的计算就相对来说会变得简单不少
OpenGL中实现的是局部变换还是全局变换?
OpenGL中采用的是列矩阵,所以其新矩阵总是乘在原矩阵的左边
表面上是先旋转后平移,实际上最终的效果是局部变换
要点总结
几何变换都是用矩阵实现的
对连续的几何变换的理解
glPushMatrix,glPopMatrix的使用,堆栈的原理
模型变换与视点变换
全局变换与局部变换
OpenGL中的变换语句顺序与实际矩阵相乘顺序相反
投影函数的参数理解
为什么物体会变形
OpenGL三位空间的坐标系、单位、原点
几个有用的函数:
Get current modelview matrix
float mat[16];
glGetFloatv(GL_MODELVIEW_MATRIX,mat);
glMultiMatrixf(mat);