绘图与GL_POLYGON圆圈,半径出规模

问题描述:

我想提请使用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

投影矩阵描述了从场景的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