여기에 약간의 혼란이 있습니다.
OpenGL은 오른 손잡이입니다. 객체 공간과 세계 공간에서 입니다.
그러나 창 공간 (일명 화면 공간)에서는 갑자기 왼손잡이가 됩니다.
어떻게 된 일 입니까?
오른 손잡이에서 왼손잡이로가는 방법은 glOrtho
또는 glFrustum
투영 행렬 의 음의 z 스케일링 항목입니다 . z를 -1로 축척하면 (x와 y는 그대로두고) 좌표계의 손길을 변경하는 효과가 있습니다.
glFrustum의 경우
far 및 near 는 양수 여야하며 far > near . 말 까지 = 1000 근처 = 1. 그러면 C =-(1001) / (999) = -1.002.
자세한 내용과 다이어그램 은 여기 를 참조 하십시오 .
에서 직교 사시도 , glOrtho 이런 행렬을 생성한다 :
여기서 left , right , bottom 및 top 은 left vertical , right vertical , bottom horizontal , top horizontal clip planes (resp) 의 좌표입니다 .
그러나 근거리 및 원거리 평면 은 다르게 지정됩니다 . 근처 파라미터로 정의
- 근거리 : 더 가까운 깊이 클리핑 평면까지 의 거리 입니다. 비행기가 시청자 뒤에있을 경우이 거리는 음수입니다.
그리고 멀리 :
- zFar 더 먼 깊이 클리핑 평면까지 의 거리 입니다. 비행기가 시청자 뒤에있을 경우이 거리는 음수입니다.
여기에 일반적인 표준 뷰 볼륨이 있습니다.
z 승수가 (-2 / (근거리))이기 때문에 마이너스 기호는 z를 -1로 효과적으로 스케일 합니다. 이것은 "z"가 왼손잡이 임을 의미합니다. , OpenGL에서 단순히 "오른손"좌표계로 작업하기 때문에 대부분의 사람들이 모르는 사이에보기 변환 중에 바뀝니다.
그래서 전화하면
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
그러면 NEAR PLANE이 10 단위 앞서 있습니다 . 어디야? 원점에서 x 축은 오른쪽, y 축은 머리 위에, 코 는 음의 z 축을 가리키고 있습니다 (기본값 "기본적으로 카메라는 원점에 있습니다. , 음의 z 축 아래를 가리키고 상향 벡터가 (0, 1, 0)입니다. " ). 따라서 가까운 평면은 z = -10에 있습니다. 먼 평면은 z = + 10에서 10 단위 뒤에 있습니다 .