2017-10-14 8 views
0

OpenGL을 사용하여 원을 회전하려고하지만 회전 할 때 원의 절반 만 표시됩니다. 나는 init()에 뭔가 잘못되었다고 생각합니다. 그는 원의 절반에 가까운 비행기로립니다, 나는 가정,OpenGL을 회전 할 때 객체의 절반 만 보임

float angle = 0.0f; 

void display(void) 
{ 

    glClearColor(1.0f, 1.0f, 1.0f,1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 


    glColor3f(0.0, 0.0, 0.0); 
    glPushMatrix(); 
    //glTranslatef(x, y, 0); // Move circle to desired location. 
    glRotatef(angle, 0, 0, 1); 
    drawCircle(10.0, 50.0); 

    glPopMatrix(); 

    glutSwapBuffers(); 
} 

void timer(int val) 
{ 
    angle += 0.5f; 
    glutTimerFunc(val, timer, val); 
    glutPostRedisplay(); 
} 

void init() 
{ 
    glEnable(GL_DEPTH_TEST); 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-15.0, 15.0, -15.0, 15.0, 0.0, 200); 
    } 

int main(int argc, char **argv) 
{ 
    .. 
    glutDisplayFunc(display); 

    glutTimerFunc(10, timer, 10); 

    init(); 
    glutMainLoop(); 
    return 0; 
} 

답변

0

가까운면이 직교 투영 0이기 때문에 다음은 코드입니다.

투영 행렬은 장면의 3D 점에서 뷰포트의 2D 점으로의 매핑을 설명합니다. 시각 공간에서 클립 공간으로 변환되고 클립 공간의 좌표는 클립 좌표의 w 구성 요소로 나눔으로써 표준화 장치 좌표 (NDC)로 변환됩니다. NDC는 (-1, -1, -1)에서 (1,1,1)까지의 범위 내에 있습니다. NDC 외부의 모든 형상은 잘립니다.
직교 투영법에서 눈 공간의 좌표는 정규화 된 장치 좌표에 선형으로 매핑됩니다.

이것이 의미

enter image description here

left, right, bottom, top, nearfar 및에 의해 정의 된 입방체에서 모든 형상은 뷰포트에 묘화된다. 지오메트리가 근거리 평면과 원거리 평면 사이에 있지 않으면 그릴 수 없습니다. 그런 식으로 가까운 계획과 먼 계획을 선택해야하며, 모든 형상이 중간에 있어야합니다. left의 값은 으로 설정됩니다. 다음과 같이 코드를 수정하십시오.

glOrtho(-15.0, 15.0, -15.0, 15.0, -200.0, 200.0);