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

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

void draw1()
{//glClear(GL_COLOR_BUFFER_BIT);  //注释掉为了能反映每次循环三角形的位置glBegin(GL_POLYGON); // 多边形glColor3f(0.0, 0.0, 1.0);glVertex2f(0.05, -0.65);glVertex2f(0.05, -0.75);glVertex2f(0.15, -0.8);glEnd();glFlush();
}
void display() {for (int i = 0; i < 3; i++) {glTranslatef(0.0, 0.02*i,0.0);draw1();}
}

这个是没有加push和pop操作的代码,我们可以看到每0.02个单位都会生成一个小三角形,也就是说在每次都清空背景的情况下我们可以看到一个一直匀速向上运动的小三角形:
在这里插入图片描述
代码②:

void draw1()
{//glClear(GL_COLOR_BUFFER_BIT);  //注释掉为了能反映每次循环三角形的位置glBegin(GL_POLYGON); // 多边形glColor3f(0.0, 0.0, 1.0);glVertex2f(0.05, -0.65);glVertex2f(0.05, -0.75);glVertex2f(0.15, -0.8);glEnd();glFlush();
}void display() {for (int i = 0; i < 3; i++) {glPushMatrix();glTranslatef(0.0, 0.02*i,0.0);draw1();glPopMatrix();}
}

这个是加了push和pop操作的绘制,可以看到三角形并没有一直上移的趋势,一直都在一个移动区间内绘制,并且无限for循环,也就是说在每次绘制都清空背景的情况下我们会看到一个快速在区间内跳动的三角形:
在这里插入图片描述

原理解释

那么到底为什么会这样呢?经过查阅多方资料得知,glPushMatrix();和glPopMatrix();在OpenGL代码中的行为,其实就是一个压栈出栈的行为,不过他有一个特点就是“重置”,也就是他的配对使用可以消除上一次变换对于本次变换的影响,使得参考点回到最初的坐标原点,而不会随着图像的上移而一直上移,进而生成一个移动区间,从而达到图形在区间内运动的效果。

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

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

相关文章

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

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

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

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

解决 go mod tidy 加载模块超时

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

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

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

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

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

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

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

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

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

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…

新手学习MAYA,需要知道的10个技巧!

Autodesk Maya&#xff0c;也称为“Maya”或“Maya 3D”&#xff0c;是一种计算机图形程序&#xff0c;用于电影、电视、游戏和视觉效果 (VFX) 中的各种 3D 动画。它旨在在 Windows、Mac OS 和 Linux 操作系统上运行&#xff0c;并于 1990 年代后期首次发布。一般来说&#xff…

记一次Maya入门之材质和模型的导出

目录 关于3D资源导出 HyperShader打开方式和材质导出方法 HyperShader新增的材质如何替换原模型的材质 Maya可以扩展编程吗? 参考资料&#xff1a; Unity3D使用的第三方工具 Maya官方文档&#xff0c;FBX插件 Maya所有工具包20个 Maya神器级Mel脚本组&#xff08;mal…

MAYA 2022基础入门学习教程

流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;48.0 KHz 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09;|大小解压后:3.41 GB |时长:4.5小时 包含第一部分和第二部分课程 课程获取&#xff1a;MAYA 2022基础入门学…

Maya2022基础入门学习教程

Maya2022基础入门学习教程 Maya 2022 Essential Training Maya2022基础入门学习教程 Maya 2022 Essential Training MP4 |视频:h264&#xff0c;1280x720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 技能水平:初级|流派:电子学习|语言:英语中文字幕&#xff08;机译&…

Maya入门课程

拥有经验丰富的21年专业教师的完整Maya课程 在Autodesk Maya中学习您想要的所有3D运动:建模、纹理、照明、固定、运动、Eleme 你会学到: 最终&#xff0c;您将可以轻松地使用Autodesk Maya进行演示、表面处理、修复、增强、流动、光照和渲染 用关键帧激活三维对象 为高质量回…