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

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 ...

    opengl中的堆栈操作

    本文将深入探讨`glPushMatrix()`和`glPopMatrix()`这两个函数在OpenGL中的使用。 一、`glPushMatrix()`和`glPopMatrix()`概述 `glPushMatrix()`函数的作用是将当前的模型视图矩阵(Modelview Matrix)或投影矩阵...

    android OpenGL

    - **glMatrixMode/glPushMatrix/glPopMatrix**: 控制矩阵栈的操作。 ##### 4. 视口设置 - **glDepthRange**: 设置深度值范围。 - **glViewport**: 设置视口的位置和大小。 ##### 5. 颜色与光照 - **glColor/...

    opengl函数大全

    * glPushMatrix, glPopMatrix:压入和弹出当前矩阵堆栈 * glPushAttrib, glPopAttrib:压入和弹出属性堆栈 * glPushClientAttrib, glPopClientAttrib:在客户属性堆栈中保存和恢复客户状态变量组 * glPushName, ...

    openGL_函数_收集

    `glPushMatrix()`将当前矩阵栈顶的矩阵复制并压入栈中,`glPopMatrix()`则从栈中弹出顶部的矩阵并设为当前矩阵,这样可以恢复到之前的状态,常用于保存和恢复变换状态。 7. **glRasterPos2i()**: - 该函数用于...

    基于OpenGL的全景漫游技术在VB中的实现

    2. **glPushMatrix** 和 **glPopMatrix**: 用于保存和恢复当前的矩阵状态。这在绘制复杂的图形时特别有用,可以在绘制过程中暂时更改矩阵,绘制完成后恢复原来的矩阵状态。 3. **glTranslatef**: 用于将物体或坐标...

    GL库函数 GL库函数 GL库函数 GL库函数 GL库函数

    3. **glPushMatrix、glPopMatrix** - 堆栈操作,用于保存和恢复当前矩阵,确保状态管理。 4. **glPushAttrib、glPopAttrib** - 类似于矩阵堆栈,但用于保存和恢复OpenGL的状态。 5. **glPushClientAttrib、...

    OPENGL图形任意缩放

    2. **局部缩放(glPushMatrix() / glPopMatrix() + glScalef())**: 允许你在缩放某个物体之前和之后执行其他变换,通过保存和恢复栈来实现局部操作。 ```cpp glPushMatrix(); glScalef(scaleFactorX, scaleFactorY...

    使用OPENGL读取3DS文件

    这涉及到调用`glDrawArrays`或`glDrawElements`来绘制三角形,以及使用`glPushMatrix`和`glPopMatrix`保存和恢复当前的模型视图矩阵,以实现模型的运动控制。 7. **动画与帧缓冲**:如果要让3DS模型进行运动,你...

    C程序设计大作业openGL.pdf

    - `glPushMatrix()`和`glPopMatrix()`用于保存和恢复当前的模型视图矩阵,便于进行复杂的变换操作。 - `glTranslated()`和`glRotated()`分别用于移动和旋转物体。 - `glutSolidSphere()`用于绘制实心球体,参数...

    VC++将灰度图转化为三维图.pdf

    8. **绘制3D图形**:`DrawGLScene` 是主要的绘制函数,先清除屏幕和深度缓冲,然后使用 `glPushMatrix` 和 `glPopMatrix` 进行状态保存和恢复,避免影响其他图形。`glTranslatef` 平移,`glScalef` 缩放,`glBegin` ...

    太阳。地球,月球的框架结构

    - `glMatrixMode`, `glPushMatrix` 和 `glPopMatrix`: 用于设置和管理变换矩阵栈。 - `glTranslatef` 和 `glRotatef`: 实现平移和旋转变换。 - `glutWireSphere`: 绘制一个线框球体。 #### 3.3 OpenGL 渲染管道 - *...

    OpenGL函数库

    (2)矩阵操作、几何变换和投影变换的函数,如 glPushMatrix()、glPopMatrix()、glLoadMatrix()、glMultMatrix()、glMatrixMode() 和 glLoadIdentity() 等。 (3)颜色、光照和材质的函数,如 glColor*()、glIndex*...

    opengl函数查询

    - **glPushMatrix, glPopMatrix**: 压入和弹出当前矩阵堆栈。 - **glPushAttrib, glPopAttrib**: 压入和弹出属性堆栈。 - **glPushClientAttrib, glPopClientAttrib**: 在客户端属性堆栈中保存和恢复客户端状态...

    openGL做出三角形图形

    - `glPushMatrix()`和`glPopMatrix()`:保存和恢复当前矩阵堆栈,便于进行图形变换。 - `glTranslatef(0,0,-5)`:沿Z轴负方向平移5个单位。 - `glClipPlane(GL_CLIP_PLANE0,v)`:设置裁剪平面,其中`v`为裁剪平面...

    glut的双视图的代码

    每次绘制前后,都需要使用`glPushMatrix()`和`glPopMatrix()`来保存和恢复当前的模型视图矩阵,以保持不同视图之间的独立性。 8. 刷新与循环:调用`glutSwapBuffers()`交换双缓冲的前后帧,完成一帧的渲染。然后...

    OpenGL编程指南

    OpenGL使用矩阵堆栈来保存和恢复变换状态,允许复杂场景的变换操作,通过glPushMatrix()和glPopMatrix()进行管理。 四、OpenGL中的颜色、光照和材质 4.1 颜色 OpenGL中的颜色通常使用RGB或RGBA格式表示,通过...

    OpengL选定图形方法介绍与代码

    ### OpengL选定图形方法介绍与代码 #### OpengL简介 OpenGL(Open Graphics Library)是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。它使用接近硬件底层的命令集来绘制复杂的图形、曲线...

    opengl的教程_下载

    ### OpenGL教程:2D与3D视图切换及材质参数...以上就是关于OpenGL中2D与3D视图切换的方法,以及常用材质属性的详细介绍。通过对这些基础概念和技术的理解和掌握,可以帮助开发者更好地利用OpenGL进行图形渲染和处理。

Global site tag (gtag.js) - Google Analytics