我创建一个立方体作为房间并在其中设置相机。我想在其中一面墙上画一个钟。但是当我绘制一个显示时钟的圆圈时,它无法正常工作。有人能帮我画墙上的钟吗?这是我的代码:
void room(){
if(flag){
glRotatef(rt,0.0f,1.0f,0.0f);
}
glEnable(GL_NORMALIZE);
glColor3f(1.0, 1.0 ,1.0); //roof
glNormal3f(0,-1,0);
glVertex3f( 3.0, 3.0,-3.0);
glVertex3f(-3.0, 3.0,-3.0);
glVertex3f(-3.0, 3.0, 3.0);
glVertex3f( 3.0, 3.0, 3.0);
glColor3f(1.0, 1.0 ,0.0); //floor
glNormal3f(0,1,0);
glVertex3f( 3.0,-3.0, 3.0);
glVertex3f(-3.0,-3.0, 3.0);
glVertex3f(-3.0,-3.0,-3.0);
glVertex3f( 3.0,-3.0,-3.0);
glColor3f(1.0, 0.0 ,0.0); //behind wall
glNormal3f(0,0,-1);
glVertex3f( 3.0, 3.0, 3.0);
glVertex3f(-3.0, 3.0, 3.0);
glVertex3f(-3.0,-3.0, 3.0);
glVertex3f( 3.0,-3.0, 3.0);
glColor3f( 0.0, 1.0,1.0); // front wall
glNormal3f(0,0,1);
glVertex3f( 3.0,-3.0,-3.0);
glVertex3f(-3.0,-3.0,-3.0);
glVertex3f(-3.0, 3.0,-3.0);
glVertex3f( 3.0, 3.0,-3.0);
glColor3f(0.0 ,0.0,1.0); //left wall
glNormal3f(1,0,0);
glVertex3f(-3.0, 3.0, 3.0);
glVertex3f(-3.0, 3.0,-3.0);
glVertex3f(-3.0,-3.0,-3.0);
glVertex3f(-3.0,-3.0, 3.0);
glColor3f( 0.2, 0.4, 0.0); // right wall
glNormal3f(-1,0,0);
glVertex3f( 3.0, 3.0,-3.0);
glVertex3f( 3.0, 3.0, 3.0);
glVertex3f( 3.0,-3.0, 3.0);
glVertex3f( 3.0,-3.0,-3.0);
}
void drawClock() {
char buff[100];
GLfloat x1=2.0;
GLfloat y1=2.0;
GLfloat z1=-3.0;
GLfloat radius = 1.0; // Radius
int angle;
glLoadIdentity();
//glClearColor(1.0, 1.0, 1.0, 1.0);
//glClear(GL_COLOR_BUFFER_BIT);
//glOrtho(0.0, 20.0, 0.0, 20.0, -10.0, 10.0);
// Draw circle
glPushMatrix();
glTranslatef(3.0,3.0,-3.0);
glBegin(GL_TRIANGLE_FAN);
glColor3f(0.5,1.0,0.0);
glVertex3f(x1, y1, z1);
for(angle=0; angle <= 360; angle +=1)
glVertex3f(x1 + cos(angle * PI/180.0f)* radius, y1 + sin(angle *PI/180.0f)* radius, z1);
glEnd();
glPopMatrix();
}
答案 0 :(得分:0)
墙的中心应为(0, 0, -3)
而不是(2, 2, -3)
。可能最好使用(0, 0, -2.9)
,以便时钟略微在内部,而不是完全在墙上。
另外我要说你需要添加
glBegin(GL_QUADS);
在room
函数的开头和
glEnd();
最后。
另外,为什么在绘制时钟之前调用glTranslatef
如果它使用与墙相同的坐标系?