大佬教程收集整理的这篇文章主要介绍了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()时,并不是所有这些更改都消失了?当我再次恢复到“干净的”石板时,我的盒子是如何移动到屏幕上的?
如果我在进行更改后再次弹出矩阵,那么该翻译的状态如何记录?
以上是大佬教程为你收集整理的c – glPushMatrix()和glPopMatrix()如何保持场景相同?全部内容,希望文章能够帮你解决c – glPushMatrix()和glPopMatrix()如何保持场景相同?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。