2017-09-16 5 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

그것은하는 gluLookAt에서 z 좌표는? – emic

+0

세계 좌표에서보기 (또는 카메라 또는 눈) 좌표까지 변환을 정의합니다. 당신은'lookAt' 행렬로 그것을한다. 투영 변환을 사용하고 있지 않습니다. 최종 좌표는 NDC로, 2x2x2 크기의 상자입니다. Rotation 및 Scaling과 같은 변형에 대해 알아야합니다. – Ripi2

+0

looAt를 삭제하기 위해 코드를 약간 변경했지만 지금은 원이 더 커, 전체 창의 1/4이 차지하고 있습니다. @ 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