c – glPushMatrix()和glPopMatrix()如何保持场景相同?

我发现一些在线的代码将在屏幕上移动一个框,然后在框到达屏幕结束后重置它.
这是代码
void display(void) {
  int sign = 1;
  if (lastFrameTime == 0) {
    /*
     * sets lastFrameTime to be the number of milliseconds since
     * Init() was called;
     */
    lastFrameTime = glutGet(gluT_ELAPSED_TIME);
  }

  int Now = glutGet(gluT_ELAPSED_TIME);
  int elapsedMilliseconds = Now - lastFrameTime;
  float elapsedtime = float(elapsedMilliseconds) / 1000.0f;
  lastFrameTime = Now;

  int windowWidth = glutGet(gluT_WINDOW_WIDTH);

  if (BoxX > windowWidth) {
    BoxX -= windowWidth;
  }
  BoxX += (sign)*256.0f * elapsedtime;

  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  glPushmatrix();
  //creates a new matrix at the top that we can do things to?
  glTranslatef(BoxX,0.0f,0.0f);

  /*
   * draw a "quad" (rectangle)
   */
  glBegin(GL_QUADS);
  glVertex2f(0.0f,0.0f);
  glVertex2f(128.0f,128.0f);
  glVertex2f(0.0f,128.0f);
  glEnd();
  glPopMatrix();
  //pops that matrix off the stack so we can have a "clean" version to do something next time.?

  glutSwapBuffers();
}

现在,我了解glPushMatrix()glPopMatrix()的方式是,glPushmatrix()在堆栈上放置(或者推送)一个新的矩阵,以便您进行操作,以便在弹出后,您将再次有一个“干净的”.这就是为什么如果我在glEnd()之后忽略glPopMatrix(),我的平方似乎加速而不是以恒定的速度移动.

但是,如何保留在glPushmatrix()和glPopMatrix()中进行的更改?当我使用glPushmatrix()并对顶部矩阵进行更改时,它可以显示变化,但是当我使用glPopMatrix()时,并不是所有这些更改都消失了?当我再次恢复到“干净的”石板时,我的盒子是如何移动到屏幕上的?

如果我在进行更改后再次弹出矩阵,那么该翻译的状态如何记录?

解决方法

它只是用于转换由glPopMatrix恢复的坐标的矩阵.不是整个framebuffer.帧缓冲区包含四边形的渲染,改变矩阵后不会影响已经呈现的任何内容.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...