如何撤消glTranslatef的效果
How to undo the effect of glTranslatef
假设我想翻译一个多边形。如果在绘制之前我使用 glTranslatef,它会被翻译,但如果我想画两个多边形并且只翻译一个,我该怎么办?
#include <OpenGL/OpenGL.h>
#include <GLUT/GLUT.h>
#include "utility.h"
void init()
{
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
}
void render()
{
glClearColor(APPLE_GRAY);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glTranslatef(0.5, 0.0, 0.0);
glBegin(GL_POLYGON);
glColor4f(RED);
glVertex2f(0,0.5);
glVertex2f(-0.5,-0.5);
glVertex2f(0.5, -0.5);
glBegin(GL_POLYGON);
glColor4f(BLUE);
glVertex2f(0.5,0.5);
glVertex2f(-0.5,0.5);
glVertex2f(-0.5, -0.5);
glVertex2f(0.5, -0.5);
glEnd();
glFlush();
}
我只想翻译三角形,而不是正方形。怎么做?
在翻译之前,请调用:
glPushMatrix()
然后在绘制第一个多边形后,调用:
glPopMatrix()
我还注意到,在第一个多边形之后,您没有glEnd()
调用。 此外,除非有更多未列出的代码,否则我注意到您在调用 glOrtho()
时不会从模型视图切换到投影矩阵。 如果您仅在本例中使用模型视图矩阵,则这不是绝对必要的,但传统方法是像这样设置投影:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
然后,渲染函数为多边形渲染设置模型视图矩阵。 同样,这不是一个要求,您的示例看起来会满足您的需求,因为您只使用一个矩阵。
参考: glPushMatrix() OpenGL 文档
相关文章:
- 在Qt中复制,剪切,粘贴,重命名,撤消和重做
- 如何撤消此代码上的 cin 重定向?
- 在Maya API中撤消操作
- Qt 撤消/重做和线程
- 撤消班次而不截断
- 在2048年游戏中撤消操作实施
- C 撤消命令 /反向以前的状态
- 与撤消历史的麻烦(Qundostack,Qundoview等)
- 在 QTextEdit 中撤消/重做
- C++向下转换以撤消功能覆盖
- 使用最小样板保存/加载+撤消/重做机制
- glTranslatef拉伸我的球体,我怎么能不拉伸它就平移球体
- 撤消仪表convert依行动
- 使用 glm 撤消/防止围绕特定轴旋转
- 如何从 gdiplus 撤消拉绳
- 撤消后触发重做
- 如何撤消glTranslatef的效果
- gltranslatef glrotate error?
- 撤消按关键字隐藏的名称"using"。在孙子班不工作
- OpenGL glTranslatef无法正常工作