glPushMatrix()的使用

glPushMatrix()的使用当你做了一些移动或旋转等变换后 使用 glPushMatrix OpenGL 会把这个变换后的位置和角度保存起来 然后你再随便做第二次移动或旋转变换 再用 glPopMatrix OpenGL 就把刚刚保存的那个位置和角度恢复 比如 glLoadIdenti glTranslatef 1 0 0 向右移动 1 0 0 glPushMatrix

//

以下来自:http://www.cppblog.com/doing5552/archive/2009/01/08/71531.html(感谢作者,作者的logo很棒)

今天忽然感悟到为什么在进行变换之前要用glPushMatrix();这个函数,而在变换完毕后有用glPopMatrix()这两个函数了,赶紧记下来:

    我们在变换坐标的时候,使用的是glTranslatef(),glRotaef()等函数来操作,操作的是什么呢?操作的是当前矩阵,我们也知道,这些坐标变换(翻转,旋转也好)都是通过操作矩阵来实现的,而矩阵相乘是会叠加的,当你用完一个变换函数后,当前操作的矩阵就被改变了,当你还停留在变换以前的思维,我在这个地方绘制恰好是我想要的时候,你会发现再绘制出来的不是在你想要的位置,因为你在操作变换的时候,当前矩阵被改变了。

   比如你在默认情况下在原点画了一个球,然后又进行了一个变换,比如用glTranslatef( 0.0, 0.0, 1.0 );沿z轴移动一定距离又画了一个球,然后你想再在原点画一个大一点的球覆盖原来的那个,当你绘制的时候就会发现,你现在绘制的球已不在你想像的地方了。

我们来做个实验:

代码如下:

//glPushMatrix();

    //glPopMatrix();

    当我们把glPushMatrxi()和glPopMatrix()注释掉以后我们发现,当我们再想在同样的位置绘制一个正方形的时候,就会发现已经按我们的glTransfef()所指定的沿x轴偏移了0.2个单位。

而当我们不把两句函数调用注释掉时,运行发现,绿色的正方形覆盖了原来的红色的正方形。

所以,这两个函数的压栈弹栈是有用地~~~~~~~~~~

这两个函数的具体的执行方式就不扯了,网上n多。

知之为知之,不知百度之

~~~~~~~~~~~~吼吼~~~~~~~~~~

续文:

顿悟这点以后,晚上又突然想明白了另一个大问题:移动光源的位置。

在顿悟以前,总觉得光源该怎么移动呢?那不是十分十分麻烦么,而且不知道怎么办,现在明白了这个道理以后,光照的移动就简单了。

移动方式:

      先pushMatrix()一下,然后在进行移动操作,然后旋转操作,然后指定光源的位置,然后PopMatrix()一下,就完成了。

测试代码:

#include

static int spin = 0;

GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223841.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:19
下一篇 2026年3月17日 下午1:19


相关推荐

  • 这几种方法帮你快速实现回到页面顶部

    这几种方法帮你快速实现回到页面顶部背景介绍当页面内容很多的时候 用户可能会一直往下滑动页面 但是当他想返回页面顶部进行其他操作时 他可能需要不断滚动鼠标滚轮 这就导致用户体验将很差 鉴于这种情况 回到顶部 这一功能便出现了 如今在我们浏览网站的时候 常常能遇见 回到顶部 这个按钮 目前主流的回到页面顶部分表现为两种 一种是直接回到页面的顶部 这种方式简单粗暴 另外一种则是自动滚动间接回到页面顶部 这样一来视觉体验上可能更好 但是用户需要过几秒才能看到顶部内容 例如掘金 在滚动到一定高度时会出现 回到顶部 按钮 点击后会直接回到页面

    2026年3月19日
    2
  • Windows 7系统安装MySQL5.5.21图解

    Windows 7系统安装MySQL5.5.21图解

    2021年11月16日
    39
  • 贪吃蛇 java实现超简单的贪吃蛇(附源代码)

    贪吃蛇 java实现超简单的贪吃蛇(附源代码)贪吃蛇游戏贪吃蛇是个非常经典的游戏 用 Java 基础来写 对初学 Java 的小伙伴有一定帮助 希望大家喜欢 这个是跟着带我的老师写的 因为写得简单 希望大家都能看得懂 游戏界面 游戏背景素材不喜欢的话可以自己换 就被在乎我选的素材 代码 1 Mainpackagec tedu worm importjava awt Graphics importjava awt Image importjava awt Toolkit importjava awt event KeyAd

    2026年3月17日
    4
  • 信奥中的数学:二次互反律

    信奥中的数学:二次互反律二次互反律 B 站搜 二次互反律如何理解二次互反律在数论中的重要性 如何理解二次互反律在数论中的重要性 知乎如何简洁地证明二次互反律 有哪些具体应用 如何简洁地证明二次互反律 有哪些具体应用 知乎二次互反律百度百科二次互反律 百度百科基础数论第十一课 二次互反律基础数论第十一课 二次互反律 哔哩哔哩 bilibili 二次互反律 QuadraticRec 二次互反律 QuadraticRec

    2026年3月19日
    2
  • 多智能体系统的三种编排模式:Supervisor、Pipeline 与 Swarm

    多智能体系统的三种编排模式:Supervisor、Pipeline 与 Swarm

    2026年3月15日
    4
  • 利用随机森林对特征重要性进行评估

    利用随机森林对特征重要性进行评估随机森林是以决策树为基学习器的集成学习算法 随机森林非常简单 易于实现 计算开销也很小 更令人惊奇的是它在分类和回归上表现出了十分惊人的性能 因此 随机森林也被誉为 代表集成学习技术水平的方法 本文是对随机森林如何用在特征选择上做一个简单的介绍

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号