2017-09-16 164 views
0

我想提請使用GL_POLYGON和我試過代碼圓的是工作,但該圓的半徑好像出與窗口大小規模的,我不明白爲什麼。繪圖與GL_POLYGON圓圈,半徑出規模

下面是代碼:

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    if(start == OFF) 
    { 
     //Set Drawing Color - Will Remain this color until otherwise specified 
     glColor3f(0.2, 0.3, 0.5); //Some type of blue 

     //Draw Circle 
     glBegin(GL_POLYGON); 
     for(double i = 0; i < 2 * PI; i += PI/24) 
      glVertex3f((cos(i) * radius) + gX,(sin(i) * radius) + gY, 0.0); 
     glEnd(); 

     //Draw Circle 
     center_x = gX; 
     center_y = gY; 
    }  

    glutSwapBuffers(); 
} 

和初始化函數:

void init (void) 
{ 
    /* selecionar cor de fundo (preto) */ 
    glClearColor (0.0, 0.0, 0.0, 0.0); 

    /* inicializar sistema de viz. */ 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
} 

我設置窗口大小爲600,半徑爲1的圓的四分之一把我們的整個窗口。我猜測我必須做一些半徑變換,我只是不知道如何。

+0

是它的Z在gluLookAt協調? – emic

+0

您正在定義一個轉換:從世界座標到視圖(或相機,或眼睛)座標。你用'lookAt'矩陣來做。您沒有使用投影轉換。您的最終座標是NDC,這是一個2x2x2大小的框。您應該瞭解這些和其他轉換,例如旋轉和縮放。 – Ripi2

+0

我稍微改了一下代碼來刪除looAt,但是現在這個圓圈更大了,其中四分之一是整個窗口。 @ Ripi2 – emic

回答

1

投影矩陣描述了從場景的3D點到視口的2D點的映射。它從眼空間變換到夾子的空間,並在裁剪空間座標由與夾子座標的w分量除以變換到歸一化設備座標(NDC)。 NDC在(-1,-1,-1)到(1,1,1)的範圍內。

在正交投影中,眼圖空間中的座標線性映射到標準化的設備座標。

Orthographic Projection

正投影可以通過glOrtho設置。你在(0,0),一個右上角的設置了一個左下角視口(1,1)和深度範圍從-1到1:

glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 

如果你想建立投影,使您可以在窗口的大小尺度繪製,那麼你必須做這樣的:

int wndWidth = 800; // for example a window with the size 800*600 
int wndHeight = 600; 

glOrtho(0.0, (float)wndWidth, 0.0, (float)wndHeight, -1.0, 1.0); 

如果你想擁有的原點(0,0)在窗口的中心,那麼你必須這樣做:

float w = (float)wndWidth/2.0f; 
float h = (float)wndHeight/2.0f; 

glOrtho(-w, w, -h, h, -1.0, 1.0); 

請參閱furthe R:

+1

這幫助了很多!謝謝! @ Rabbid76 – emic