2011-05-16 4 views
3

gluPerspective 및 gluLookAt와 함께 투시도를 사용하고 있으며 오브젝트의 x, y 좌표를 가지고 있습니다. 객체가 가시 영역 밖에 있는지 어떻게 알 수 있습니까? 카메라가 항상 움직이는 것을 유의하십시오.오브젝트 외부 카메라 OpenGL

+1

Frustum 컬링은 화면에없는 모든 것을 제거하는 과정이므로 동일한 알고리즘을 사용하여 반대 결과를 찾는 것이 좋습니다. http://www.flipcode.com/archives/Frustum_Culling.shtml –

+0

그러나 나는 뭔가가 제거되었는지 알고 싶다. 나는 2 대의 자동차를 얻었고 카메라는 그들 중간 지점에 설치되어있다. 그들이 너무 멀리 떨어져 있다면 (카메라를 둘 다 "떠난다") 나는 그들을 중간에 놓아야 만한다. –

답변

5

우선 첫번째 : OpenGL에는 카메라가 없습니다. 꼭지점을 변형시킵니다. 그리고 gluLookAt는 생각한 카메라의 움직임과 반대 인 객체에 변형을 적용합니다.

용액

이미 로버트 Massaioli 의해 제 댓글에서 받았던 :는 OpenGL에서 투시 변환은 절두체의 관점에서 설명된다 ( gluPerpective는는 glFrustum 절두체 파라미터를 계산하고, 이러한 전달). 따라서 개체의 절두체 컬링을 결정 (즉, 컬링 된 경우)하면 볼 수 있는지를 결정할 수 있습니다.

0

고정 된 거리를보고 있기 때문에 그들이 카메라를 떠날 것이라고 말하는가? .. 아니면 그냥 사라지는거야?

첫 번째 경우 (촬영 측면에서) x, y 평면에서 얼마나 멀리 떨어져 있는지 계산할 수 있어야합니다. 현재 투시도 설정에 따라 카메라를 이동해야합니다.

후자의 경우, 추려내는 것을 막기 위해 최대 Z 깊이를 늘려야합니다.

[편집 1]gluPerspective에서는 화각과 종횡비를 설정합니다. 비행기까지의 거리와 중심점에서부터 자동차까지의 거리를 알아야하므로 필요한 모든 정보를 얻을 수 있습니다. 남은 것은 볼 수있는 것과 그렇지 않은 것을 해결하기위한 약간의 삼각법입니다.

[편집 2]another very useful tutorial 나는 절두체 도려 내기를 수행하는 다양한 방법을 설명합니다.

+0

첫 번째 사례입니다. 카메라는 고정 된 거리이지만 자동차와 함께 회전합니다. 이것이 내 주요 문제입니다. –