gpt4 book ai didi

c++ - 如何撤销 glTranslatef 的效果

转载 作者:行者123 更新时间:2023-11-30 00:37:38 25 4
gpt4 key购买 nike

假设我想平移一个多边形。如果在绘制之前我使用 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() 时不会从模型 View 切换到投影矩阵。如果您在此示例中仅使用模型 View 矩阵,则这不是绝对必要的,但传统方法是像这样设置投影:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);

然后,您的渲染函数会为多边形渲染设置模型 View 矩阵。同样,这不是要求,您的示例看起来会满足您的需要,因为您只使用一个矩阵。

引用:glPushMatrix() OpenGL Documentation

关于c++ - 如何撤销 glTranslatef 的效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com