【发布时间】:2015-04-06 04:37:33
【问题描述】:
所以我画了一个“我”并使用 gluLookAt(0.f,0.f,3.f,0.f,0.f,0.f,0.f,1.f,0.f) , I 是中等大小。然后我添加了一个 drawScene() 函数,它用渐变颜色绘制背景,然后“我”变得超级大。我想这是因为我在 drawScene() 中将矩阵模式更改为 GL_PROJECTION 和 GL_MODELVIEW,而这些可能会改变视角?我想 glPushMatrix() 和 glPopMatrix() 需要保留矩阵状态,但我很难找到放置它们的位置。那么我怎样才能让“我”看起来正常大小呢?这是我的 drawI() 和 drawScene():
void drawI(int format)
{
glBegin(format);
glColor3f(0, 0, 1);
glVertex2f(point[3][0], point[3][1]);
glVertex2f(point[2][0], point[2][1]);
glVertex2f(point[1][0], point[1][1]);
glVertex2f(point[12][0], point[12][1]);
glVertex2f(point[10][0], point[10][1]);
glEnd();
glBegin(format);
glVertex2f(point[10][0], point[10][1]);
glVertex2f(point[11][0], point[11][1]);
glVertex2f(point[12][0], point[12][1]);
glEnd();
glBegin(format);
glVertex2f(point[9][0], point[9][1]);
glVertex2f(point[10][0], point[10][1]);
glVertex2f(point[3][0], point[3][1]);
glVertex2f(point[4][0], point[4][1]);
glVertex2f(point[6][0], point[6][1]);
glColor3f(1, 0.5, 0);
glVertex2f(point[7][0], point[7][1]);
glVertex2f(point[8][0], point[8][1]);
glEnd();
glBegin(format);
glColor3f(0, 0, 1);
glVertex2f(point[5][0], point[5][1]);
glVertex2f(point[6][0], point[6][1]);
glVertex2f(point[4][0], point[4][1]);
glEnd();
}
void drawScene()
{
glBegin(GL_QUADS);
//red color
glColor3f(1.0,0.0,0.0);
glVertex2f(-1.0,-1.0);
glVertex2f(1.0,-1.0);
//blue color
glColor3f(0.0,0.0,1.0);
glVertex2f(1.0, 1.0);
glVertex2f(-1.0, 1.0);
glEnd();
}
非常感谢!
所以我从 drawScene() 和 drawI() 中取出 glMatrixMode() 和 glLoadIdentity() 并将它们放入 display() 中。我改了上面的drawScene()和drawI(),这里是我的display()
void display()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(70.f,1.f,0.001f,30.f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawScene();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.f,0.f,3.f,0.f,0.f,0.f,0.f,1.f,0.f);
drawI(GL_TRIANGLE_FAN);
glutSwapBuffers();
}
【问题讨论】:
-
你没有给
drawI打电话,而且你从来没有创建过除恒等式以外的投影矩阵? -
我在另一个名为 display() 的函数中调用了 drawScene() 和 drawI()。是的,我没有创建投影矩阵,这是为什么呢?抱歉,这个问题对于 OpenGL 来说可能很愚蠢
-
我认为我们仍然需要查看调用这两个函数的代码,以了解您调用 gluLookAt 的方式和位置。
-
我从辅助函数中取出 glMatrixMode() 和 glLoadIdentity 并在调用 drawScene() 和 drawI() 之前将它们放入 display() 中。
标签: opengl