2014-11-02 122 views
0

我有一個繪製圓的函數。繪製正方形時的OpenGL圓弧半徑問題

glBegin(GL_LINE_LOOP); 
for(int i = 0; i < 20; i++) 
{ 
    float theta = 2.0f * 3.1415926f * float(i)/float(20);//get the current angle 

    float rad_x = ratio*(radius * cosf(theta));//calculate the x component 
    float rad_y = radius * sinf(theta);//calculate the y component 

    glVertex2f(x + rad_x, y + rad_y);//output vertex 

} 
glEnd(); 

這工作丹迪。我將X,Y和半徑值保存在我的對象中。

然而,當我試着畫一個正方形用下面的函數調用:

newSquare(id, red, green, blue, x, (x + radius), y, (y + radius)); 

我獲得下面的圖片。

enter image description here

正如你看到的,廣場是近一倍寬(看起來更像直徑)。以下代碼是我如何創建我的方形框。正如你所看到的,它開始於它應該在的圓圈的中心。並且應該延伸到圓的邊緣。

glBegin(GL_QUADS); 
    glVertex2f(x2, y2); 
    glVertex2f(x2, y1); 
    glVertex2f(x1, y1); 
    glVertex2f(x1, y2); 
glEnd(); 

我似乎無法理解爲什麼這是!

+0

你的代碼看起來正確(假設'ratio = 1')。構建圓時,您可能已經設置了一些錯誤的參數。顯然,兩個'radius'變量都不匹配。 – 2014-11-02 15:24:39

+0

我的比例實際上是父窗口的寬度/高度!我會調查。 – 2014-11-02 15:27:32

+1

哦,所以你做了一個手動投影。你應該把它留給投影矩陣。這確保所有對象都在同一個座標系中。例如。你還沒有x修正你的四邊形。 – 2014-11-02 15:29:28

回答

1

如果您正在糾正某個對象的x位置,則必須爲所有其他對象執行此操作。

但是,如果你繼續這樣做,你很快就會陷入困境。在你的情況下,只有對象的寬度被糾正,但不是他們的位置。您可以通過設置正交投影矩陣來解決所有問題,而且您不需要再次修正位置。例如。像這樣:

glMatrixMode(GL_PROJECTION); //switch to projection matrix 
glOrtho(-ratio, ratio, -1, 1, -1, 1); 
glMatrixMode(GL_MODELVIEW); //switch back to model view 

其中

ratio = windo width/window height 

此構造一個座標系,其中頂部邊緣具有y=1,底部邊緣y=-1和左,右兩側分別具有x=-ratiox=ratio