在房间opengl中绘制一个球体

时间:2017-04-01 05:17:28

标签: opengl

我有一个提供给我的房间的代码,我需要在房间里添加一个球体。它是这样的:

PushMatrix();
       //draw floor,walls,ceilings
       PushMatrix();
       //draw some boxes on front wall
       PopMatrix();

       PushMatrix();
       //drawing sphere;
        glLoadIdentity();
        glColor3f(1, 0, 0);
        glTranslatef(0, ypos, 0);
        glutSolidSphere(2, 20, 20);
       PopMatrix();

 PopMatrix();

但是当我这样做时,所有的墙壁都会变成红色(并且没有球体)。为什么即使推出另一个矩阵后也会发生这种情况?

1 个答案:

答案 0 :(得分:1)

调用glColor*()设置当前颜色。在再次致电glColor*()之前,此颜色不会更改。换句话说,glPushMatrix()glPopMatrix()对当前颜色没有影响。

因此,如果您在//draw some boxes on front wall中不致电glColor*()。然后由于您通过调用glColor3f(1, 0, 0)将颜色设置为红色,那么从那一点开始一切都将变为红色。

考虑:

glMatrixMode(GL_PROJECTION);
gluPerspective(40, 1, 1, 40);
glMatrixMode(GL_MODELVIEW);

然后:

glPushMatrix();
glTranslatef(0, 0, -10);
glColor3f(1, 0, 0);
glutSolidSphere(2, 20, 20);
glPopMatrix();

通过以上操作,您应该看到一个球体。

因此,如果你之前根本没有看到球体。然后可能是因为ypos超出了你的观点。如果你指的是整个屏幕是红色的,那么我假设ypos0左右,这意味着它将填满整个屏幕(再次假设你没有翻译视图以任何其他方式)。