码迷,mamicode.com
首页 > 其他好文 > 详细

OpenGL glMultMatrixf() glPushMatrix() glPushMatrix()浅析

时间:2016-12-31 23:04:20      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:class   pac   解释   void   images   单位   旋转   idt   操作   

我在之前的博客中曾提到过,OpenGL中坐标是采用行向量表示的,与之相对应的是,在矩阵变换中使用的是变换矩阵的转置,并且使用的是后乘的方式。本文直接使用下面的代码来及其后的图示来解释函数

void glMultMatrixf( const GLfloat *m )
void glPushMatrix( void )
void glPushMatrix( void )

的含义。代码中函数rotate(float angle, float x, float y, float z)是让坐标点绕向量(x, y, z)旋转angle角度,旋转方向符合右手螺旋定则。函数rotate(45, 0, 1, 0),rotate(45, 0, 0, 1),rotate(45, 1, 0, 0)对应的矩阵分别为A,B,C的转置。

 1     glMatrixMode(GL_MODELVIEW);
 2     matrixView.identity();
 3     matrixView.rotate(45, 0, 1, 0);
 4     matrixView.translate(0, 0, -cameraDistance);
 5 
 6     glPushMatrix();
 7     glMultMatrixf(matrixView.get());
 8 
 9     matrixView.identity();
10     matrixView.rotate(45, 0, 0, 1);
11 
12     glPushMatrix();
13     glMultMatrixf(matrixView.get());
14 
15     matrixView.identity();
16     matrixView.rotate(45, 1, 0, 0);
17 
18     glPushMatrix();
19     glMultMatrixf(matrixView.get());
20 
21     glPopMatrix();
22     glPopMatrix();
23     glPopMatrix();

其对栈顶矩阵的操作过程如下图:

技术分享

栈顶矩阵初始默认是一个单位矩阵,后使用函数glMultMatrixf载入与当前矩阵相乘的矩阵反而最先与坐标相乘。下面七张图是与上图七种栈顶状态相对应的茶壶位置,图中红,绿,蓝色箭头分别代表x,y,z轴

(1)

技术分享

(2)

技术分享

(3)

技术分享

(4)

技术分享

(5)

技术分享

(6)

技术分享

(7)

技术分享

 

OpenGL glMultMatrixf() glPushMatrix() glPushMatrix()浅析

标签:class   pac   解释   void   images   单位   旋转   idt   操作   

原文地址:http://www.cnblogs.com/pursuiting/p/6240282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!