2012-05-05 3 views
1

조회 투영을 설정하는 데 문제가 있습니다. 나는 꼭지점 (0, 0, 0) (0, 0, 1) (0, 1, 1) (0, 1, 0) (1, 0, 0) (1, 1, 0) (1, 1, 1) 및 (1, 0, 1)로 구성된다. 이것은 뷰를 초기화하는 방법입니다.OpenGL 전망 투상을 설정하십시오.

void initGL(int x,int y, int w, int h) 
{ 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowPosition(x, y); 
    glutInitWindowSize(w, h); 
    glutCreateWindow("CSE328 Project 1"); 

    glutDisplayFunc(draw); 
    glFrontFace(GL_FRONT_AND_BACK); 
    glMatrixMode(GL_PROJECTION); 
    glFrustum(-10.0, 10.0, -10.0, 10.0, 2.0, 40.0); 
    glMatrixMode(GL_MODELVIEW); 
    gluLookAt(10, 10, 10, 0.5, 0.5, 0, 0, 1.0, 0); 
    glutMainLoop(); 
} 

어떤 이유로 든 큐브가 전체 화면을 채 웁니다. frustum 및 lookAt 메서드의 값을 변경하려고 시도했으며 큐브가 전혀 표시되지 않거나 전체 뷰포트를 채 웁니다. glLookAt에서 나는 '눈'이 (10, 10, 10)에 위치하고 큐브의 표면에있는 점 (0.5, 0.5, 0)을보고 있다고 가정합니다. 큐브 전체가 보일 수 있도록 충분한 거리가 있다고 생각했습니다. 내가 잘못 생각한거야? 나는 또한 z = 10에서 z = 11에 놓 이도록 큐브를 z 방향으로 움직이려고 시도 했으므로 클리핑 면도 마찬가지지만 비슷한 결과를 제공합니다.

+3

OpenGL에서는 초기화하지 않습니다. 너는 국가를 세웠다. initGL에서 여러분이하는 대부분은 실제로 드로잉 코드에 속해 있습니다. 행렬 설정 (ID BTW 재설정이 누락되었습니다). – datenwolf

+0

감사합니다. 내 문제는 신분을 재설정하지 않아서 발생했습니다. – Kris

답변

0

큐브의 길이는 1이고,보기 볼륨은 x 및 y 차원에서 20 단위입니다. 입방체는 정사영 투영이더라도 중간에 일부 픽셀을 차지합니다. 드로잉 중에 다른 변형이 적용되지 않는 한.

나는 절두체를 더 작게 (예 : +/- 2.0f) 만들고 카메라를 가까이에 두는 것이 좋습니다. (4.0f, 4.0f, 4.0f).

0

gluLookAt()의 첫 번째 3 개 매개 변수를 변경하여 눈높이를 큐브에서 멀리 이동하면 작게 만들어야합니다.

glFrustum()으로 전화를 바꿔서 gluPerspective()을 호출하면 원근 투영을 원하는대로 쉽게 구성 할 수 있습니다.