我在之前的博客中曾提到过,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的转置。

     glMatrixMode(GL_MODELVIEW);
matrixView.identity();
matrixView.rotate(, , , );
matrixView.translate(, , -cameraDistance); glPushMatrix();
glMultMatrixf(matrixView.get()); matrixView.identity();
matrixView.rotate(, , , ); glPushMatrix();
glMultMatrixf(matrixView.get()); matrixView.identity();
matrixView.rotate(, , , ); glPushMatrix();
glMultMatrixf(matrixView.get()); glPopMatrix();
glPopMatrix();
glPopMatrix();

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

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

(1)

(2)

(3)

(4)

(5)

(6)

(7)

OpenGL glMultMatrixf() glPushMatrix() glPushMatrix()浅析的更多相关文章

  1. OpenGL ES一些函数详解(一)

    glLoadIdentity和glMultMatrix   glLoadIdentity的作用是将当前模型视图矩阵转换为单位矩阵(行数和列数相同的矩阵,并且矩阵的左上角至右下角的连线上的元素都为1,其 ...

  2. OpenGl之旅-—初识opengl

    昨天学习了如何使用codeblocks来编译运行一个opengl的项目.在创建一个新的opengl项目时他默认已经写了一个示例,今天我们就上面的例子进行下代码的剖析,以此来敲开opengl的神秘大门. ...

  3. Python>>>创建一个简单的3D场景

    首先安装PyOpengl pip install PyOpenGL PyOpenGL_accelerate

  4. 关于PDA、GPS等动态资源的几种GIS解决方案

    关于PDA.GPS等动态资源的几种GIS解决方案(原创) 今年来GIS发展迅速,特别是实时监控中引入了GPS,PDA等动态资源,使得GIS在各个行业的应用更为广泛. 1.在这些动态资源资源的监控中主要 ...

  5. OpenGL的glPushMatrix和glPopMatrix矩阵栈顶操作函数详解

    OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作的.opengl中的变换一般包括视图变换.模型变换.投影变换等,在每次变换后,opengl将会呈 ...

  6. OpenGL中glPushMatrix和glPopMatrix的原理

    glPushMatrix.glPopMatrix操作事实上就相当于栈里的入栈和出栈. 很多人不明确的可能是入的是什么,出的又是什么. 比如你当前的坐标系原点在你电脑屏幕的左上方.如今你调用glPush ...

  7. opengl笔记—— glMultMatrixf() 区别 glLoadMatrixf()

    能找到最好的解释来自:http://www.gamedev.net/topic/489879-glpushmatrixglpopmatrix--glloadmatrixf/ 原理: glPushMat ...

  8. 通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用

    通俗解释glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用 (2012-04-02 09:17:28) 转载▼   对于glLoadIdentity(), ...

  9. 使用glPushMatrix和glPopMatrix的原因

    转自 百度百科   glPushMatrix 函数将当前矩阵堆栈推送,通过一个,复制当前矩阵. 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的.   1. 原理讲解 终于明白 ...

随机推荐

  1. 关于pc端直播

    写这篇文章首先是想给自己一个总结.整理,还有就是给那些 没有特别明白直播是怎么回事的人一点 思路 最近公司想要做pc端直播,作为一个自认为很菜的前端实在是不知从何下手,所以只能用国人最爱的百度,搜索了 ...

  2. POJ 3422 Kaka's Matrix Travels

    Kaka's Matrix Travels Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9567   Accepted:  ...

  3. [POJ&HDU]杂题记录

    POJ2152 树形dp,每次先dfs一遍求出距离再枚举所有点转移即可. #include<iostream> #include<cstdio> #include<cma ...

  4. fastclick 源码注解及一些基础知识点

    在移动端,网页上的点击穿透问题导致了非常糟糕的用户体验.那么该如何解决这个问题呢? 问题产生的原因 移动端浏览器的点击事件存在300ms的延迟执行,这个延迟是由于移动端需要通过在这个时间段用户是否两次 ...

  5. strchr()函数 和 strrchr() 函数

    strchr 定义于头文件 <string.h>char *strchr( const char *str, int ch );寻找ch(按照如同(char)ch的方式转换成char后)在 ...

  6. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

  7. CsvHelper支持List<T>

      /// <summary> /// Csv帮助类 /// </summary> public class CsvHelper { /// <summary> / ...

  8. opencv_判断两张图片是否相同

    QQ:231469242 pip install opencv 如果找不到版本,去非官方下载opencv第三方包http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下 ...

  9. js让text值不可改变,同<input type="text" readonly="readonly" />

    <input type="text" size="60"  name="j01" value="www.52jscn.com ...

  10. boostrap 模态框

    <div class="modal fade" id="myModal" tabindex="-1" role="dialo ...