opengl中glPushMatrix()he glPopMatrix()用法的真正意义

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

        有时候在经过一些变换后我们想回到原来的状态,就像我们谈恋爱一样,换来换去还是感觉初恋好,怎么办?强大的opengl就帮我们提供了两个函数:giPushMatrix()和glPopMatrix();

        首先我们要知道,对于矩阵的操作都是对于矩阵栈的栈顶来操作的。当前矩阵即为矩阵栈的栈顶元素,而对当前矩阵进行平移、旋转等的变换操作也同样是对栈顶矩阵的修改。所以我们在变换之前调用giPushMatrix()的话,就会把当前状态压入第二层,不过此时栈顶的矩阵也与第二层的相同。

       当经过一系列的变换后,栈顶矩阵被修改,此时调用glPopMatrix()时,栈顶矩阵被弹出,且又会恢复为原来的状态。

       函数的作用过程可以用下图描述,更为直观。

    

 

          在opengl场景中一般存在多种矩阵变换操作,而控制这些操作的命令主要用到

          glMatrixMode(GLenum mode);
          作用:用于指定用哪个矩阵作为当前矩阵,mode用于指定哪一种矩阵栈是其后矩阵操作的目标。mode可取:
           GL_MODELVIEW: 把其后的矩阵操作施加于造型视图矩阵栈。(默认)
           GL_PROJECTION: 把其后的矩阵操作施加于投影矩阵栈。
           GL_TEXTURE: 把其后的矩阵操作施加于纹理矩阵栈。

          注意上述三种模式分别对应了三种矩阵栈。

          所以在场景中存在多种矩阵变换时,glPushMatrix()和glPopMatrix()一般情况下也要结合glMatrixMode(GLenum mode)运用,系统才知道具体操作的是哪个矩阵栈。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1550071.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

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()啦!

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中图形绘制后,往往需要一系列的变换来达到用户的目的,而这种变换实现的原理是又通过矩阵进行操作…

在线图片怎么转换成PDF?在线图片转换成PDF步骤介绍

文件格式要转化不知道怎么办?想要网上下载文件格式转换软件,但是却不知道下载哪个好?今天小编小编就给大家分享一下靠谱的小圆象PDF转换器工具,想知道这款软件好不好用?在线图片怎么转换成PDF?那就进来看看吧。 在线图片怎么转换成PDF 小圆象PDF转换…

解决 go mod tidy 加载模块超时

如果go mod tidy 加载模块超时 解决方法 修改GOPROXY: 查看go环境相关信息: go envgo env -w GOPROXYhttps://goproxy.cn

自动化脚本本地可以跑成功云服务器报错:FileNotFoundError:[Errno 2] No such file or directory

出现这种情况,原因之一可能是脚本中某些路径没有使用自动获取,当使用相对路径可能就会报错 把路径改为自动获取之后 self.data get_yaml_data(os.path.join(configs_path, method_path.yaml))再次运行代码就不会报文件找不到的错误了

深度强化学习落地指南总结(二)-动作空间设计

本系列是对《深度强化学习落地指南》全书的总结,这本书是我市面上看过对深度 强化学习落地讲的最好的一本书,大大拓宽了自己对RL落地思考的维度,形成了强化学习落地分析的一套完整框架,本文内容基本摘自这本书,有兴趣的…

HTML+CSS+JS实现【别踩鸡块】,含(源码+思路)

写在前面: 你是否想要掌握人工智能的最新技术和应用?你是否想要成为未来社会的创新者和领导者?你是否想要和全球的优秀导师和同学一起学习和交流?如果你的答案是肯定的,那么欢迎来到床长人工智能教程网站,这…

mysql删除数据不释放物理空间

记录mysql踩过的坑。。。 delete 命令删除数据不会释放服务器物理空间 删除之后需要执行这个命令才会释放物理空间 “optimize table 表名” (注:执行这个命令的时候你的机器需要有足够的物理空间,不然的话会出现这种问题: &…

C语言中动态分配空间的数组,可以使用sizeof求其字节数吗?

C语言中&#xff0c;动态分配的数组&#xff0c;应该注意其使用&#xff01; 和一般数组名还是有很大区别的&#xff0c;如下&#xff1a; #include<stdio.h> #include<stdlib.h>int main(){int a[12];int* b(int* )malloc(sizeof(int)*12);printf("a%d\n&qu…

多传感器数据标定融合完整教程:时间同步+空间同步(Camera+Lidar+IMU+Radar)

多传感器融合是一项结合多传感器数据的综合性前沿内容&#xff0c;主要包括Camera、激光雷达、IMU、毫米波雷达等传感器的融合&#xff0c;在自动驾驶、移动机器人的感知和定位领域中占有非常重要的地位&#xff1b; 随着AI技术的大规模落地&#xff0c;图森、百度、滴滴、Waym…

Jenkin踩过的坑

windows安装目录踩过的坑(2.253版本之后) 以前的版本&#xff0c;安装成windwos服务的话&#xff0c;所有的文件都会在安装目录下 &#xff0c;最近下了个2.253版本在电脑上进行安装的时候&#xff0c;发现安装后&#xff0c;在安装目录下只有少量的几个文件和一个war包&#x…

问道管理:多少钱可以申购新股?

随着中国股市的不断发展&#xff0c;越来越多的人开端进入投资领域。而申购新股是投资中的一种常见方法。那么&#xff0c;多少钱能够申购新股呢&#xff1f;这个问题并不简略&#xff0c;需求从多个视点来剖析。 首先&#xff0c;需求了解什么是申购新股。申购新股&#xff0c…

期权是什么?期权的优缺点是什么?

期权是一种合约&#xff0c;有看涨期权和看跌期权两种类型&#xff0c;也就是做多和做空两个方向&#xff0c;走势标的物对应大盘指数&#xff0c;这也是期权与其他金融工具的主要区别之一&#xff0c;可以用于套利&#xff0c;对冲股票和激进下跌的风险&#xff0c;下文介绍期…

Maya-Mel-1:入门数据类型

简介&#xff1a; maya中其实所有的内容都是用mayamel写的&#xff0c;平时用的时候记录的历史&#xff0c;也都是mel语言 mel语言是区分大小写的 脚本编辑器 这两个框内都可以右键鼠标&#xff0c;比如编辑框&#xff0c;“选项卡”就相当于一个源文件 这里是打开文件、保…

Maya2024下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

软件下载 软件&#xff1a;Maya版本&#xff1a;2024语言&#xff1a;简体中文大小&#xff1a;3.26G安装环境&#xff1a;Win11/Win10/Win8硬件要求&#xff1a;CPU2.5GHz 内存8G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.com/s/1y…

【Houdini MAYA】从MAYA到Houdini入门学习笔记(四)

使用Houdini做物体的巨量破碎 目录 一、Houdini实现物体的巨量破碎1.创建物体2.分散(scatter)模型3.体积化(isooffset)模型4.破碎&#xff08;Voronoi Fracture&#xff09;模型5.爆开模型(Exploded View) 二、修改scatter的数值为10w会怎样&#xff1f;三、导出模型1.导出为ob…