在房间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();