Плиточный рендеринг областей просмотра больше, чем GL_MAX_VIEWPORT_DIMS - PullRequest
2 голосов
/ 27 октября 2011

Я создаю класс, который принимает граф сцены OpenGL и использует QGLFrameBufferObject для визуализации результата. Чтобы поддерживать (практически) бесконечные размеры, я использую мозаику, чтобы извлечь много маленьких изображений, которые можно объединить в большое изображение после рендеринга всех плиток.

Я делаю мозаику, устанавливая область просмотра (glViewport) для всего изображения, а затем использую glScissor, чтобы «вырезать» плитку после плитки. Это хорошо работает для разрешений до GL_MAX_VIEWPORT_DIMS, но приведет к пустым плиткам за пределами этого предела.

Как мне подойти к этой проблеме? Нужно ли переделывать камеру или есть хитрые приемы для этого? Я использую Coin / OpenInventor, поэтому любые советы, специфичные для этих фреймворков, тоже приветствуются.

Ответы [ 3 ]

1 голос
/ 27 октября 2011
1 голос
/ 27 октября 2011

Смена камеры не так сложна, как вы думаете, и это единственное решение, которое я вижу вообще, кроме изменения вершинных шейдеров.

Путем масштабирования и перемещения матрицы проекции по осям X и Yосей, вы можете легко получить любой субрегион нормального обзора камеры.

Для заданного максимума и минимума области просмотра, где полный область просмотра составляет (-1, -1) и (1, 1), переведите(max + min) / 2 и масштаб (max - min) / 2.

0 голосов
/ 27 октября 2011

Вы можете попытаться уменьшить весь мир, косвенно сделав максимальный учет в окне просмотра для большей детализации. Или, в принципе, вы можете уменьшить изображение и окно просмотра и получить тот же визуальный эффект.

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