2011-03-27 98 views
2

我正在嘗試構建一輛汽車,並且以多邊形開始。汽車的物理性能已經完成了很多,但是汽車在轉向時並沒有面向正確的位置。旋轉自己的軸

所以我嘗試使用GLRotated與glRotated(_angle,0,0,1);其中_angle是以度數表示的汽車角度,但它不是在它自己的軸上旋轉。

我該如何解決這個問題?

的代碼是在這裏:

void Car::draw(){ 
    Vector2d min = _position - _size/2.0; 
    Vector2d max = _position + _size/2.0; 
    glColor3d(0.8, 0, 0); 
    glLoadIdentity(); 
    glRotated(_angle, 0, 0, 1); 
    glLineWidth(1.5); 
    glBegin(GL_POLYGON); 
     glVertex3d(min[0], min[1], 0); 
     glVertex3d(max[0], min[1], 0); 
     glVertex3d(max[0], max[1], 0); 
     glVertex3d(min[0], max[1], 0); 
    glEnd(); 
    glPopMatrix(); 
} 

感謝。

回答

1

glRotate *圍繞原點旋轉。你可以翻譯回原點,旋轉,再翻譯出來,但你可能會爲自己充其量只是不添加_position:

void Car::draw(){ 
    Vector2d min = - _size/2.0; 
    Vector2d max = + _size/2.0; 
    glColor3d(0.8, 0, 0); 
    glLoadIdentity(); 
    glTranslated(_position[0], _position[1], 0); 
    glRotated(_angle, 0, 0, 1); 
    glLineWidth(1.5); 
    glBegin(GL_POLYGON); 
     glVertex3d(min[0], min[1], 0); 
     glVertex3d(max[0], min[1], 0); 
     glVertex3d(max[0], max[1], 0); 
     glVertex3d(min[0], max[1], 0); 
    glEnd(); 
    glPopMatrix(); 
} 

這是一樣轉化爲原點,旋轉,向外平移除與開始對象已經在原點上。另外,不要忘記,和幾乎所有的圖形庫一樣,OpenGL也組成矩陣,以便最後完成最本地的事情,而不管您如何描述抽象中的總體變換。

+0

謝謝,那個訣竅:) – 2011-03-27 18:38:35