2010-12-06 96 views
1

我有一個簡單的OpenGL應用程序,它顯示一條線。我將x1, y1, x2y2存儲在全局變量中。2D中的OpenGL旋轉

旋轉函數使用feedback功能,討論了here和翻譯來源方法,建議here。它的目的是圍繞它的中心旋轉一條線。

下面的代碼:


void rotate(float theta) 
{ 

    GLfloat* buff = new GLfloat[5]; 
    glFeedbackBuffer(5, GL_2D, buff); 
    glRenderMode(GL_FEEDBACK); 

    int center_x = x1 + (x2 - x1)/2; 
    int center_y = y1 + (y2 - y1)/2; 

    glPushMatrix(); 
     glTranslatef(-center_x, -center_y, 0); 
     glRotatef(theta, 0, 0, 1); 
     glTranslatef(center_x, center_y, 0); 
     line(); 
    glPopMatrix(); 

    x1 = (int)buff[1]; 
    y1 = (int)buff[2]; 
    x2 = (int)buff[3]; 
    y2 = (int)buff[4]; 

    delete[] buff; 
    glutPostRedisplay(); 
} 

然而,兩種譯法似乎收效甚微 - 線條仍然圍繞窗口的左下角旋轉。此外,如果線條不適合可見表面,線條會被裁剪(這不會在翻譯註釋掉時發生 - 如果線條落在可見表面之外,線條會拒絕移動)。

爲什麼不能使用此代碼?如何在2D中圍繞它的中心(或任意點)旋轉一條線?

回答

2

在我看來,你正在翻譯錯誤的方向,原點被放置在左下方的視口之外。你想把原點移動到你想要翻譯的點 - 所以如果原點在左下角,你需要翻譯+ center_x,+ center_y。旋轉,翻回(-center_x,-center_y),然後繪製。

+0

確實,現在它的工作,謝謝!然而,當它旋轉時,線條緩慢地移向窗口的左下角;這可以避免嗎? – 2010-12-06 18:58:20