2011-10-27 5 views
1

OpenGL 장면 그래프를 사용하는 클래스를 만들고 결과를 렌더링하는 데 QGLFrameBufferObject을 사용합니다. (사실상) 무한 크기를 지원하기 위해 저는 타일을 사용하여 모든 타일을 렌더링 한 후에 큰 이미지로 결합 할 수있는 많은 작은 이미지를 추출합니다.GL_MAX_VIEWPORT_DIMS보다 큰 뷰포트의 타일 렌더링

전체 이미지에 대해 뷰포트 (glViewport)를 설정 한 다음 타일 다음에 "잘라내 기"위해 glScissor을 사용하여 타일링합니다. 이 해상도는 최대 GL_MAX_VIEWPORT_DIMS까지는 제대로 작동하지만이 한계를 벗어나는 빈 타일이됩니다.

이 문제는 어떻게 해결해야합니까? 이 작업을 수행하기 위해 카메라를 변경해야합니까 아니면 깔끔한 트릭이 있습니까? 나는 코인/오픈 인벤터 (Coin/OpenInventor)를 사용하고 있기 때문에이 프레임 워크와 관련된 모든 팁도 매우 환영합니다.

답변

1

카메라를 바꾸는 것은 생각만큼 힘들지 않으며, 버텍스 쉐이더 수정을 제외하고는 전혀 볼 수없는 유일한 해결책입니다.

x 축과 y 축을 따라 투영 행렬을 스케일링하고 변환하면 일반 카메라의 뷰의 하위 영역을 쉽게 얻을 수 있습니다.

전체 뷰포트가 (-1, -1) 및 (1, 1)이고, (max + min)/2로 변환되고, max- min으로 스케일되는 뷰포트의 주어진 최대 및 최소)/2

+0

렌더링 된 "창"을 좁히기 위해 [SbViewVolume :: narrow] (http://doc.coin3d.org/Coin/classSbViewVolume.html#a10f0ca68486f3dc6fa9253e705573d5a)를 사용하여 뷰 볼륨을 조정했습니다. – larsmoa

0

간략하게보기 포트 최대 계정을 만드는 간접적 인 노력으로 전체 세계를 축소 할 수 있습니다. 또는 기본적으로 이미지와 뷰포트의 크기를 조정하고 동일한 시각적 효과를 낼 수 있습니다.

+0

그렇다면 GL_MAX_VIEWPORT_DIMS보다 큰 이미지를 생성 할 수 없으므로 필수적입니다. – larsmoa

+0

얼마나 큰지에 달려 있습니다. 이것은 VISUAL 효과를 위해 특정 지점까지 작동합니다. – Sean

관련 문제