2011-09-19 3 views
1

OpenGL 환경이별로 없습니다. 나는 주전자를 그리고 카메라를 주전자 주위로 옮기려고합니다. 이를 위해 gluLookAt 함수를 사용하고 있습니다. 문제는 내가 gluLookAt를 호출 할 때 화면이 비어 있고 내 찻 주전자를 볼 수 없다는 것입니다.gluLookAt()가 빈 화면을 만듭니다.

#include "openGLer.h" 

void openGLer::simulate(grid* toSim, int* argc, char** argv) 
{ 
    myGrid = toSim; 
    glutInit(argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowSize(400, 400); //Set the window size 
    glutCreateWindow(""); 
    glutDisplayFunc(display); 
    glutIdleFunc(display); 
    glutKeyboardFunc(handleKeypress); 
    glEnable(GL_DEPTH_TEST); 
    glutMainLoop(); 
} 

void openGLer::handleKeypress(unsigned char key, //The key that was pressed 
           int x, int y) 
{ 
    switch (key) 
    { 
    case 27: exit(0); 
    } 
} 

void openGLer::camera() 
{ 
    gluLookAt(3, 3, 0, 
       0, 0, 0, 
       0, 1, 0 
      ); 
} 

void openGLer::draw() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 
    camera(); 
    glutWireTeapot(0.5); 
    glutSwapBuffers(); 
} 

void openGLer::display() 
{ 
    draw(); 
} 

왜 gluLookAt()가 화면을 공백으로 만들고 어떻게 수정합니까? camera()가 호출되지 않으면 코드가 예상대로 수행됩니다. 주전자가 표시됩니다.

+1

주전자가 보이지 않을 수도 있습니다. –

+0

그런 일이 벌어지고 있습니다. 그러나 camera()가 호출되지 않으면 예상대로 주전자를 볼 수 있습니다. – Mikhail

+0

'camera()'를 호출하지 않으면,보고있는 것을 변경하지 않기 때문입니다. –

답변

2

올바르게 투영 매트릭스를 설정 했습니까? 그렇지 않으면 gluLookAt으로 전화하면 찻 주전자가 너무 멀리 떨어져서 멀리있는 비행기에서 잘릴 수 있습니다.

초기화 코드 (창 크기를 조정할 때 크기 조정 핸들러)에이 값을 추가하십시오. 먼 비행기를 100으로 설정했습니다.이 비행기는 주전자에 충분해야합니다.

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluPerspective (60.0, width/(float)height, 0.1, 100.0); 
glMatrixMode(GL_MODELVIEW); 
+0

감사합니다! 그것은 그것을 고쳤던 것처럼 보였다! – Mikhail

+0

투영 및 뷰포트 설정은 모양 변경 핸들러가 아닌 표시 기능에서 수행해야합니다. – datenwolf