c – glPushMatrix()和glPopMatrix()如何保持场景相同?
发布时间:2020-12-16 05:32:03 所属栏目:百科 来源:网络整理
导读:我发现一些在线的代码将在屏幕上移动一个框,然后在框到达屏幕结束后重置它. 这是代码: void display(void) { int sign = 1; if (lastFrameTime == 0) { /* * sets lastFrameTime to be the number of milliseconds since * Init() was called; */ lastFrame
我发现一些在线的代码将在屏幕上移动一个框,然后在框到达屏幕结束后重置它.
这是代码: 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()并对顶部矩阵进行更改时,它可以显示变化,但是当我使用glPopMatrix()时,并不是所有这些更改都消失了?当我再次恢复到“干净的”石板时,我的盒子是如何移动到屏幕上的? 如果我在进行更改后再次弹出矩阵,那么该翻译的状态如何记录? 解决方法
它只是用于转换由glPopMatrix恢复的坐标的矩阵.不是整个framebuffer.帧缓冲区包含四边形的渲染,改变矩阵后不会影响已经呈现的任何内容.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |