2012-04-04 144 views
0

我已經成功地在OpenGL(C++)中旋轉了一個矩形。我正在製作一個程序,使用「分離軸定理」測試兩個矩形的碰撞。要使用這個定理,我需要矩形每個角的x和y座標,但是我的問題是,儘管我叫glRotatef(...),矩形的角的座標並沒有改變爲它們旋轉的值,但矩形應該旋轉。如何在glRotatef被調用後更新矩形的座標?不更新座標位置?

代碼:在OpenGL

// float r1.x[4] and r1.y[4] hold the x and y position of each of the 4 corners, starting with the upper left (r1.x[0], r1.y[0]) 
    glLoadIdentity(); 
    glTranslatef((r1.x[0] + r1.x[2])/2, (r1.y[1] + r1.y[3])/2, 0); // Translates matrix to center of rectangle 
    glRotatef(r1.angle, 0, 0, 1); 
    glTranslatef(-((r1.x[0] + r1.x[2])/2), -((r1.y[1] + r1.y[3])/2), 0); // Translates back 
    r1.angle++; 

    glBegin(GL_QUADS); 
     glVertex2f(r1.x[0], r1.y[0]); 
     glVertex2f(r1.x[1], r1.y[1]); 
     glVertex2f(r1.x[2], r1.y[2]); 
     glVertex2f(r1.x[3], r1.y[3]); 
    glEnd(); 

回答

2

轉型調用(如glTranslatefglRotatef)更新內部轉換矩陣,得到由你在屏幕上繪製得到之前提供點相乘。 OpenGL完全不會觸及你的數據。

一般來說,這就是你想要的。你有一個時間常數不變的模型,但它會發生變化。

但是,如果你需要更新你的數據,你需要創建自己的轉換矩陣,人工繁殖,然後用乾淨的變換矩陣畫(用glLoadIdentity

可以得到一點雖然可以從OpenGL獲得幫助,因爲您可以從OpenGL獲取轉換矩陣,但我不推薦這麼做。數學並不難,你會很高興學習如何去做。