OpenGL에서 시선을 중심으로 회전할 때 변형을 방지하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/79360

  •  09-06-2019
  •  | 
  •  

문제

XZ 평면에 타원을 그린 다음 관점을 Y축에서 약간 위로 설정하고 다시 Z에서 다시 설정하여 45도 각도에서 타원 중심을 바라보고 gluPerspective()를 사용하여 보기 절두체를 설정했습니다. .

ellipse

회전하지 않은 경우 타원의 주축은 뷰포트의 너비에 걸쳐 있습니다.시선을 기준으로 90도 회전하면 이제 타원의 주요 축이 뷰포트 높이에 걸쳐 있으므로 타원이 변형됩니다(이 경우 덜 편심하게 표시됩니다).

rotated ellipse

이러한 변형을 방지하려면(또는 최소한 이를 고려하여) 시선에 대한 회전이 인지된 타원의 주요 축을 유지하도록(이 경우 뷰포트를 벗어나도록 하려면) 어떻게 해야 합니까?

도움이 되었습니까?

해결책

gluPerspective()를 호출할 때 애스펙트로 1.0을 사용하고 있는 것 같습니다.너비/높이를 사용해야 합니다.예를 들어 뷰포트가 640x480인 경우 1.33333을 측면 인수로 사용합니다.

다른 팁

OpenGL 사양에 따르면:

void gluPerspective( GLdouble fovy,
                     GLdouble aspect,
                     GLdouble zNear,
                   GLdouble zFar )

측면은 창 너비와 높이의 함수여야 합니다.특히 너비를 높이로 나눈 값입니다(단, 0으로 나누는 것에 주의하세요).

아마도 창문이 정사각형이 아닌 한 정확하지 않은 측면으로 1을 사용하고 있을 것입니다.

gluPerspective 호출의 측면 매개변수를 조정해야 하는 것 같습니다.보다 맨 페이지.창이 물리적으로 정사각형이라면 종횡비는 1이 되고 문제는 사라질 것입니다.그러나 창은 직사각형이므로 보기 절두체는 정사각형이 아니어야 합니다.

가로 세로 비율을 window_width / window_height로 설정하면 타원이 올바르게 보일 것입니다.창 크기가 조정될 때마다 이를 업데이트해야 합니다.GLUT를 사용한다면 gluReshapeFunc 거기에 투영 행렬을 다시 계산합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top