在房间opengl中绘制球体

在房间opengl中绘制球体,opengl,Opengl,我有一个房间的代码提供给我,我需要在房间里添加一个球体。事情是这样的: PushMatrix(); //draw floor,walls,ceilings PushMatrix(); //draw some boxes on front wall PopMatrix(); PushMatrix(); //drawing sphere; glLoadIdentity(); glCo

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

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();
但当我这样做时,所有的墙等都变成红色(没有球体)。为什么在按下另一个矩阵后仍会发生这种情况?

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

因此,如果您在
//前墙上画一些框
不要调用
glColor*()
。然后,由于您通过调用
glColor3f(1,0,0)
将颜色设置为红色,因此从该点开始,所有颜色都将变为红色

考虑到:

glMatrixMode(GL_PROJECTION);
gluPerspective(40, 1, 1, 40);
glMatrixMode(GL_MODELVIEW);
然后:

通过执行上述操作,您将看到一个球体

因此,如果你以前根本没有看到球体。那可能是因为
ypos
在你的视野之外。如果您指的是整个屏幕是红色的,那么我假设
ypos
0
附近,这意味着它将填满整个屏幕(再次假设您不以任何其他方式转换视图)


PushMatrix
/
PopMatrix
仅影响变换矩阵。听起来你希望他们也能保存和恢复当前的颜色,但是他们没有。gluPerspective(80.0800.0/600.0,0.1100.0);如果这些是论点,那么球体的可行位置是什么?我试过使用半径25,但你的代码说半径是
2
?但是,如果半径是
25
(并且考虑到你的视角),那么像
glTranslatef(0,0,-100)
这样的东西应该将球体推得足够远。哦,实际上半径不是问题,我在25之前和25之后使用了2。谢谢不,我还没试过呢。谢谢你的回答。我会在尝试后发布结果啊,好吧,只是有点困惑。当你更新了问题后发表评论,我注意到了。
glPushMatrix();
glTranslatef(0, 0, -10);
glColor3f(1, 0, 0);
glutSolidSphere(2, 20, 20);
glPopMatrix();