2013-05-09 5 views
1

glFrustum을 사용하여보기 볼륨을 제한하여 화면에서 이미지를 자르려고했습니다. Glfrustum에 대한 공식 설명서에서, left, right, top, bottom, near, far은 클리핑 좌표입니다. 나는 그들이 화면 좌표라고 생각하고 다음을 시도했다 :OpenGL의 표준화 좌표

glFrustum(100, 924, 100, 668, 3, 1000); 

위의 내용은 화면에 아무 것도 표시하지 못했다. 그래서, 난 그냥 어딘가에 고개를 다음과 같이 몇 가지 코드를 보았다 (그런데 왜 그 좌표는 음?) :

glFrustum(-1, 1, -1, 1, 0.5, 1000); 

은 내가 excat 같은 일을 사용하고 화면의 이미지의 일부를 받기 시작했다. 그 후, 나는 좌표를 바꿔서 near을 추적하고 볼륨이 어떻게 변하는 지 알아 챘다.

glFrustum(-10,10,-10,10,10,1000); 
glFrustum(-100,100,-100,100,100,1000); 
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000); 

위의 모든 내용은 화면에서 나에게 동일한 이미지 출력을 제공합니다. 하지만 glFrustum이 사용되는 곳을 보았던 대부분의 곳에서 [-1,1] (예 : here)과 정규화 된 범위의 계산에 대해 설명하는 값이 사용 된 것으로 나타났습니다. 정규화 된 값의 측면에서 left, right, bottom, top, near, far의 계산이 중요합니까 (정규화 된 값에 가깝거나 멀리 포함되어 있습니까?). 화면 좌표의 값을 사용하여 동일한 작업을 수행 할 수 있습니까?

답변

2

우선, glFrustum은 화면 해상도에 독립적입니다.

이 함수는 장면이 그려 질 볼륨을 정의합니다. 즉,이 볼륨 외부로 던져지는 screne의 모든 요소는 무시되거나 잘립니다. glFrustum의 좌표는 화면이 아닌 씬과 관련이 있습니다. 등의

glFrustum(-10,10,-10,10,10,1000); 
glFrustum(-100,100,-100,100,100,1000); 
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000); 

위의 모든주는 것과 같은 출력 정확한 표현을 위해, 다른 매개 변수는 장면 회전/번역처럼 올바르게 구성해야 함을 고려하여

enter image description here

테이크, 화면의 이미지

3D 모델이 POV (카마라) , 예제 2는 예제 3을 생략 할 것입니다. 그러나 "왼쪽", "위쪽", "아래쪽"및 "오른쪽"에 비례하여 "근거리"거리를 증가/감소 시키면 그 결과는 비슷합니다.