如何在墙上找到一个点作为时钟的中心点?

时间:2014-02-01 16:12:02

标签: opengl visual-studio-2012 coordinates

我创建一个立方体作为房间并在其中设置相机。我想在其中一面墙上画一个钟。但是当我绘制一个显示时钟的圆圈时,它无法正常工作。有人能帮我画墙上的钟吗?这是我的代码:

 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();
}

1 个答案:

答案 0 :(得分:0)

墙的中心应为(0, 0, -3)而不是(2, 2, -3)。可能最好使用(0, 0, -2.9),以便时钟略微在内部,而不是完全在墙上。

另外我要说你需要添加

glBegin(GL_QUADS);

room函数的开头和

glEnd();

最后。

另外,为什么在绘制时钟之前调用glTranslatef如果它使用与墙相同的坐标系?