glPushMatrix 和glPopMatrix图解 ----求别笑

article/2025/10/28 8:24:45

猜想:

openGL在绘制场景时的一般用法是:

首先在函数的开始处用glLoadIdentity()设置当前的矩阵为单位矩阵。

然后在函数中用glPushMatrix()和glPopMatrix()函数进行操作:

 

根据实践判断:

即这两者是分开的,并不是当前矩阵就是栈中的最上端的矩阵。

当一开始进行glLoadIdentity时,在栈中并没有保存任何矩阵,只是将当前矩阵设置为单位矩阵;

当在程序中使用glPushMatrix 时,将当前的矩阵压入栈中

当在程序中使用glPopMatrix时,将栈中栈顶的矩阵取出放在当前矩阵中

 

以上猜想是错误的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

教训:没有直接看人家给的API说明文档。。。。

 

实际是这样的:

There is a stack of matrices for each ofthe matrix modes. In GL_MODELVIEW mode, the stack depth is at least 32.In the other two modes,GL_PROJECTION and GL_TEXTURE, the depthis at least 2.The currentmatrix in any mode is the matrix on the top of the stack for that mode.

glPushMatrix pushes the current matrix stack down by one, duplicatingthe current matrix. That is, after aglPushMatrix call, the matrix onthe top of the stack is identical to the one below it.

glPopMatrix pops thecurrent matrix stack, replacing the current matrix with the one below it on thestack.

Initially, each of the stacks contains one matrix, anidentity matrix.

红色标注的是current matrix


http://chatgpt.dhexx.cn/article/nnU0rCFs.shtml

相关文章

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

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

为什么调用glPushMatrix()和glPopMatrix()

2019独角兽企业重金招聘Python工程师标准>>> 今天忽然感悟到为什么在进行变换之前要用glPushMatrix();这个函数,而在变换完毕后有用glPopMatrix()这两个函数了,赶紧记下来: 我们在变换坐标的时候,使用的是glTranslatef(),glRotaef…

opengl入门记录--glPushMatrix和glPopMatrix原理

glPushMatrix、glPopMatrix操作事实上就相当于栈里的入栈和出栈。 很多人不明确的可能是入的是什么,出的又是什么。 比如你当前的坐标系原点在你电脑屏幕的左上方。如今你调用glPushMatrix,然后再调用一堆平移、旋转代码等等,然后再绘图。那…

OpenGL编程指南9:裁剪平面+glPushMatrix和glPopMatrix矩阵栈顶操作

1.任意裁剪平面 Opengl中,除了视景体的立方体裁剪平面之外,另外还可以额外指定多达6个裁剪平面,对视景体做进一步限制。每一个平面都由平面公式定义:AxByCzD 0.裁剪平面的指定通过函数:glClipPlane(GLenum plane,cons…

使用glPushMatrix和glPopMatrix的原因

转自 百度百科 glPushMatrix 函数将当前矩阵堆栈推送,通过一个,复制当前矩阵。 这就是后 glPushMatrix 的调用堆栈的顶部矩阵是它下面的相同的。 1. 原理讲解 终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了。将本次需要执行的缩放、平移等操…

【已解决】DQN报错:NameError: name ‘glPushMatrix‘ is not defined

1、问题 pycharm在运行DQN平衡杆代码时报错:NameError: name ‘glPushMatrix’ is not defined。 画面只出现一个白色背景。 2、分析 pyglet版本过高,降低版本即可。 pip install pyglet1.5.273、测试 没有报错,运行成功。 参考链接…

opengl glPushMatrix()

OpenGL有三个矩阵堆栈,分别是GL_MODELVIEW(模型视图矩阵堆栈)、GL_PROJECTION(投影矩阵堆栈)、GL_TEXTURE(纹理矩阵堆栈),用法和普通堆栈一样; 这里我们只讲模型视图矩阵…

解决:nameerror: name ‘glpushmatrix‘ is not defined

在尝试gym的render()时,出现错误: nameerror: name glpushmatrix is not defined最后解决的办法:更换pyglet包的版本 出现错误时的pyglet版本: 然后将版本更换为: 就可以使用env.render()啦!

NameError: name ‘glPushMatrix‘ is not defined

完整报错如下图所示: 问题原因:pyglet版本导致 我本地安装的pyglet版本是2.0.7改成,问题解决 pip install pyglet1.5.0

glPushMatrix()和glPopmatirx()

OpenGL有三个矩阵堆栈,分别是GL_MODELVIEW(模型视图矩阵堆栈)、GL_PROJECTION(投影矩阵堆栈)、GL_TEXTURE(纹理矩阵堆栈),用法和普通堆栈一样; 这里我们只讲模型视图矩阵…

OpenGL:glPushMatrix();和glPopMatrix();的作用及其原理分析

今天做到一道题,大致就是问glPushMatrix();和glPopMatrix();存在会对图形绘制造成什么影响,为了能够清晰的反应到底会存在什么影响,我特地写了两行代码: 代码①: void draw1() {//glClear(GL_COLOR_BUFFER_BIT); //注…

OpenGL的glPushMatrix和glPopMatrix矩阵栈顶操作函数

在之前的博客中,我就说过后面会详细讲解这两个函数。今天让我们来认识下它们(glPushMatrix和glPopMatrix函数)。 OpenGL中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作…

SurfaceView、GLSurfaceView、SurfaceTexture、TextureView、SurfaceHolder、Surface

SurfaceView、GLSurfaceViewe\SurfaceTexture、TextureView、SurfaceHolder、Surface 一、简介 SurfaceTexture: SurfaceTexture是从Android3.0(API 11)加入的一个新类。这个类跟SurfaceView很像,可以从video decode里面获取图像流&#xff…

android之通过SurfaceView以及SurfaceHolder进行视频播放

使用AudioView进行视频播放的时候,是不是很不爽,千篇一律的模式,恶心吧。这里,我们可以通过一些方式对MediaPlayer进行包装。而所用到的正是SurfaceView以及SurfaceHolder。 最终效果图: 我们提供了四个按钮&#xff…

ANativeWindow 和 Surface

Android播放视频从解码到显示实质也是BufferQueue的生产消费的过程,如下图所示: 其中生产者是Surface,消费者是SurfaceFlinger。 本文主要针对Surface进行分析,理清ANativeWindow 和 Surface之间的关系。 ANativeWindow的定义如…

Android之Surface 与 SurfaceFlinger关系

通过前面的知识我们知道了,Android 系统从按下开机键到桌面,从桌面点击 App 图标到 Activity 显示的过程。但是 Activity 是怎么显示在屏幕上的呢?下面我们就来讨论下这一过程。 SurfaceFlinger 启动过程 SurfaceFlinger 进程是由 init 进程…

SurfaceView、SurfaceHolder与Surface

相关文章 SurfaceView、SurfaceHolder与SurfaceTextureView、SurfaceTexture与Surface 按照官方文档的说法,SurfaceView继承自View,并提供了一个独立的绘图层,你可以完全控制这个绘图层,比如说设定它的大小,所以Surf…

surfaceView、surface和sufaceHolder的关系

surfaceView、surface和sufaceHolder的关系 1.SurfaceView与Surface的联系2.SurfaceView3.Surface4.SurfaceHolder 1.SurfaceView与Surface的联系 简单来说,Surface是管理显示内容的数据(implementsParcelable),包括存储于数据的…

线程天敌TerminateThread与SuspendThread http://blog.csdn.net/magictong/article/details/6304439

线程天敌TerminateThread与SuspendThread 标签: thread null delete dll c user 2011-04-06 13:22 10295人阅读 评论(1) 收藏 举报 分类: C Win32(93) 版权声明:本文为博主原创文章,未经博主允许不得…