在opengl中,视图和模型变换是在一个矩阵中进行控制的,这个矩阵就是GL_MODELVIEW_MATRIX,可以使用glGetFloatv函数来获取这个矩阵,而我们所要使用glTranslate*, glRotate*,glScale* 等操作均最后反映到这个矩阵的变化中,所以了解这个矩阵的构造对于灵活运用OpenGL比较重要。
变换矩阵在内存中的存放方式如下:
m[0] m[4] m[ 8] m[12]
m[1] m[5] m[ 9] m[13]
m[2] m[6] m[10] m[14]
m[3] m[7] m[11] m[15]
可以看出,OpenGL是以列序来存放这个矩阵的,位于矩阵上方的3*3矩阵是旋转矩阵,可以用来控制刚体的旋转和尺度变化,如下:rotate,scale.
m[0] m[4] m[ 8]
m[1] m[5] m[ 9]
m[2] m[6] m[10]
而左上角的3*1矩阵是用来控制刚体的平移的--translate。就是m[12],m[13],m[14]这三个值,分别控制X,Y ,Z方向的平移。所有16个值组成一标准的齐次矩阵。
变换矩阵在内存中的存放方式如下:
m[0] m[4] m[ 8] m[12]
m[1] m[5] m[ 9] m[13]
m[2] m[6] m[10] m[14]
m[3] m[7] m[11] m[15]
可以看出,OpenGL是以列序来存放这个矩阵的,位于矩阵上方的3*3矩阵是旋转矩阵,可以用来控制刚体的旋转和尺度变化,如下:rotate,scale.
m[0] m[4] m[ 8]
m[1] m[5] m[ 9]
m[2] m[6] m[10]
而左上角的3*1矩阵是用来控制刚体的平移的--translate。就是m[12],m[13],m[14]这三个值,分别控制X,Y ,Z方向的平移。所有16个值组成一标准的齐次矩阵。