`
huozheleisi
  • 浏览: 1236828 次
文章分类
社区版块
存档分类
最新评论

glPushMatrix() and glPopMatrix()以及glMatrixMode的用法

 
阅读更多

所有的这几个函数的本质都是对坐标系的操作。

前提知识:

1。每一种矩阵对应着一种坐标系。见图一

2。每一次对矩阵的操作都是对当前矩阵进行的。确切的说,作为一种状态机,每一时刻在矩阵方面只能有一种状态。

3。每一次压栈和出栈都对应着一种对坐标系的操作。

4。我们所有对矩阵的操作都是对矩阵栈的栈顶矩阵进行的。

图一

如图:全局坐标系中有一个局部坐标系,这个坐标系的状态对应着一种矩阵。假如当前矩阵为该矩阵,则该矩阵为矩阵栈中的栈顶元素。假如此时又进行了一 系列glTranslate(),glRotatef()等操作,都是对当前矩阵也就是栈顶矩阵进行了修改。若此时调用glPushMatrix()函 数,则将该矩阵压入栈中第二层的位置,当然此时栈顶位置的矩阵也与此矩阵相同。

当进行完一系列变换之后,栈顶矩阵为该矩阵。若此时调用glPopMatrix()函数,则恢复当前矩阵为该坐标系的状态。以前所进行的有关修改都被忽略了。

记住一句话,所有对矩阵进行的操作都是对栈顶矩阵进行的,压进去的矩阵式哪个矩阵,当前矩阵就是哪个矩阵,弹出来的是哪个矩阵,当前矩阵就为哪个矩阵。

记住:一个矩阵对应一个局部坐标系。
glPushMatrix
pushes the current matrix stack down by one, duplicating the current matrix. That is, after a
glPushMatrix call, the matrix on top of the stack is identical to the one below it.

见图二:

图二

glMatrixMode()的作用就是指定当前操作的矩阵为哪一个矩阵。总共有三种参数类型

1。GL_PROJECTION 表示当前操作的矩阵为透视矩阵,用于设定视景体的矩阵

2.GL_MODEVIEW 表示当前操作的矩阵为模型视点矩阵,用于对三维场景中坐标系的变换操作。

分享到:
评论

相关推荐

    opengl 帮助文档

    Use glPushMatrix and glPopMatrix to save and restore the unscaled coordinate system. Notes If scale factors other than 1 are applied to the modelview matrix and lighting is enabled, lighting often ...

    基于 C++ OpenGL框架实现小桌模型绘制【100010594】

    首先考虑到后续要组合多个图形并且要做矩阵变换,用glPushMatrix和glPopMatrix函数,对栈顶矩阵进行处理。对于矩阵的操作都是对于矩阵栈的栈顶来操作的。当前矩阵即为矩阵栈的栈顶元素,而对当前矩阵进行平移、旋转...

    opengl中的堆栈操作

    本算法可以学习函数 glPushMatrix(void)和 glPopMatrix(void)的使用方法

    计算机图形学制作时钟源代码

    // TODO: Add your message handler code here and/or call default CPaintDC dc(this); if (Timer==1) { Angle1=Angle1-1; Angle2=Angle2-1; glClearColor(1.0,1.0,1.0,1.0); glClear(GL_...

    图形绘制机器人

    图形学中用gult绘制机器人,机器人绘制:通过glPushMatrix() 和glPopMatrix()绘制出机器人层次结构模型

    使用双缓存行走的机器人

    使用双缓存绘制行走的机器人,使用glPushMatrix()和glPopMatrix()命令保存和恢复个状态变量的值。按下“g”键,机器人向前迈出一步。

    openGL期末大作业——行走的机器人

    通过glPushMatrix() 和glPopMatrix()绘制出机器人层次结构模型和几何变换,要求实现机器人手、脚、头、肩膀的旋转等几何变换,能够实现机器人走路的效果。同时机器人打上光照。内付完整代码以及实验报告!!

    计算机图形学OpenGL画机器人

    计算机图形学OpenGL画机器人,学习glPopMatrix()和glPushMatrix()的作用

    高级图形学期末大作业.rar_23R_人运动模型_读取obj文件

    实现机器人带光照的绘制和运动变换。通过glPushMatrix() 和glPopMatrix()绘制出机器人层次结构模型和几何变换,要求实现机器人手、脚、头、肩膀的旋转等几何变换,能够实现机器人走路的效果。同时机器人应打上光照。

    OpenGl实验报告.doc

    实验目的与要求 1、学习和掌握OpenGL的使用 2、掌握矩阵堆栈的实现方法 3、根据自己的创意实现实验内容,进一步掌握和理解OpenGL的使用 2. 实验内容 1、请编写地球围绕太阳自动旋转的方式 2、请再加上一个月亮, 并...

    opengl橡皮筋

    // 使用新的坐标重新绘制场景 glutPostRedisplay(); } void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); makeStripeImage(); glPixelStorei(GL_...

    threejs-coord-frames:使用单独的坐标系为three.js 中的对象层次设置动画

    使用坐标帧渲染 动画显示了摆动的三个主要组件之间的以下依赖关系: 摆臂附在支撑架上 轮子附在摆臂上 要渲染这些对象的正确动画, 必须相对于摆臂坐标系渲染车轮 必须相对于支撑坐标系渲染摆臂 OpenGL 在 OpenGL...

    用opengl做的太阳系

    VC+Opengl做的一个关于太阳系的一个例子。实现的功能比较简单,能够选择、放大缩小、全屏等功能。希望对下载的各位能有所帮助。

    OpenGL 库函数汇总(中文分类)CHM

    glPushMatrix , glPopMatrix glPushAttrib , glPopAttrib glPushName , glPopName glInitName glLoadName 1.GL 函数库(续) =============================== 显示列表 ----------------------------- ...

    opengl的太阳系模型

    //使用质量最好的模式指定颜色和纹理坐标的插值质量 glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient); // 设置环境光 glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse); // 设置漫反射光 glEnable(GL_...

    HKUST_Modeler:在此项目中,您将定义3D模型和用于移动它的控件,然后显示和操作该模型。 在这个项目中,您将使用OpenGL创建和动画自己设计的角色。 您将熟悉3D分层建模和转换

    )您还必须使用glPushMatrix()和glPopMatrix ()来嵌套矩阵转换。 建模器框架提供了用于创建滑块并将其挂接到模型的不同功能的功能。 您必须添加至少其中之一作为模型某些关节/组件的控制旋钮(实际上是滑块)-在...

    HumanMotionTrack 全

    第五步,使用递归方法分层次载入模型 这里是重点的内容了,让我们思考一些问题,实现骨骼会随着输入的方向而改变方向,需要做那些事情呢? 首先针对一块骨骼来考虑: 第一,我们需要让骨骼绕着它的节点旋转到输入的...

    用opengl绘制一个旋转正方体.cpp

    //使用双缓存 使用深度缓存。 glutInitWindowSize(480, 480); glutCreateWindow("OpenGL颜色立方体"); glutReshapeFunc(reshape); //窗口改变的时候调用的函数 glutDisplayFunc(display); glutSpecialFunc...

    计算机图形学 交互实体模型

    交互式 实体模型 简单po一段代码 #include #define ball1 5.0 #define jh 2.0 #define sjr 0.5 #pragma comment( linker, "/subsystem:\"windows\" /entry:\... glPushMatrix(); gluSphere(obj[0], ball1, 1

    openGL程序

    glColorMateriali(GL_FRONT,GL_AMBIENT_AND_DIFFUSE); glMaterialfv(GL_FRONT,GL_SPECULAR,brightLight); glMateriali(GL_FRONT,GL_SHININESS,30); glPixelStorei(GL_UNPACK_ALIGHMENT,1); dms::FileImage ...

Global site tag (gtag.js) - Google Analytics