Рендеринг обрезанного изображения в OpenGL

Я хочу визуализировать сцену с определенными параметрами камеры, где разрешение очень высокое (скажем, 20 000 x 20 000 пикселей), но на самом деле меня интересует только небольшой участок плоскости изображения размером 640x480.

Я не обязательно хочу просто увеличить часть и изменить направление камеры. Я хочу, чтобы камера оставалась направленной в одном направлении, я просто хочу визуализировать небольшую часть сцены.

Я приложил изображение, чтобы попытаться показать, о чем я говорю: Загруженное изображение

Любые подсказки о том, как я могу правильно настроить матрицу камеры с вызовами OpenGL для чего-то подобного?


person Bobby Pardridge    schedule 01.10.2013    source источник
comment
Я очень сомневаюсь, что вы найдете реализацию OpenGL, способную выполнять рендеринг в буфер кадра 20 000 x 20 000 (для этого вам может понадобиться разделить задачу рендеринга на тайлы). Но одна вещь, которую вы могли бы рассмотреть, называется коробкой с ножницами, она позволяет вам обрезать растеризацию в подпрямоугольник вашего окна просмотра. В отличие от изменения фактического сопоставления области просмотра, это не изменит характеристики вашей проекции. См.: glScissor (...) для более подробной информации.   -  person Andon M. Coleman    schedule 01.10.2013
comment
Однако это растровая операция, поэтому установка прямоугольника-ножницы не поможет вам обрезать геометрию во время сборки примитивов. Для этой цели вам может потребоваться реализовать дополнительную логику отсечения.   -  person Andon M. Coleman    schedule 01.10.2013
comment
Мне не обязательно нужен буфер кадров 20 000x20 000, я просто хочу сохранить исходную камеру, но визуализировать только небольшую часть этой плоскости изображения. То, на что я смотрел до сих пор, включало в себя изменение фактической камеры, чтобы смотреть на это место. Даже если я использую коробку с ножницами, как это поможет мне обойти тот факт, что мне все равно понадобится огромный буфер кадра, чтобы сохранить нужный уровень детализации в интересующей области?   -  person Bobby Pardridge    schedule 01.10.2013
comment
Я думаю, что, возможно, нашел ответ, я мог бы использовать это: opengl.org/sdk/docs/man2/xhtml/gluPickMatrix.xml   -  person Bobby Pardridge    schedule 01.10.2013


Ответы (2)


Я думаю, что libtr сделает то, что вы хотите.

person genpfault    schedule 01.10.2013

Все, что вам нужно сделать, это выбрать другую матрицу проекции. Старые справочные страницы для glFrustum описывают, как создать такой матрица:

матрица проекции

Левый, правый, верхний и нижний параметры определяют края вашей усеченной пирамиды (как показано на рисунке). Чтобы сделать «нормальную» матрицу проекции, лево = -право, а верх = -низ. Установка для них разных значений позволяет вам ограничивать свое представление. Например, если вы установите левое = 0 и верхнее = 0, оставив правый и нижний нетронутыми, то у вас будет проекция, похожая на красные области на вашем изображении.

Если вы выясните значения, которые вы используете в настоящее время, должно быть просто настроить их для получения желаемого результата.

person fintelia    schedule 01.10.2013
comment
Круто, я на самом деле думал пойти по этому пути, просто не был уверен, с чего начать, спасибо за вашу помощь! - person Bobby Pardridge; 02.10.2013