我有一个提供给我的房间的代码,我需要在房间里添加一个球体。它是这样的:
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();
但是当我这样做时,所有的墙壁都会变成红色(并且没有球体)。为什么即使推出另一个矩阵后也会发生这种情况?
答案 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
超出了你的观点。如果你指的是整个屏幕是红色的,那么我假设ypos
在0
左右,这意味着它将填满整个屏幕(再次假设你没有翻译视图以任何其他方式)。