Отрисовать часть текстуры - PullRequest
7 голосов
/ 20 ноября 2010

Поскольку многослойный рендеринг с геометрическим шейдером в OpenGL кажется немного хитрым на некоторых драйверах / оборудовании, я хотел бы заменить функциональность своим собственным решением. Это с помощью большой текстуры в качестве rendertarget, например, с разрешением 300². Затем симулируйте рендеринг слоёв, рендеринг до 1002 кусков в текстуре. С этим разрешением получилось бы 9 плиток / слоев, как показано на макете ниже:

Tiles

Вопрос в том; как это с OpenGL? Предположительно с помощью геометрического шейдера, который визуализирует сцену на разных тайлах за один проход.

1 Ответ

2 голосов
/ 20 ноября 2010

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

Базовый подход к проблеме:

Оставьте вершинный шейдер пустым и просто верните вершины без изменений В геометрическом шейдере создайте 8 новых экземпляров каждого треугольника (вместе у вас будет 9 треугольников) На каждом из треугольников запустите функцию, которая будет проецировать треугольник. Согласно скриншоту, вам потребуется 9 различных матриц представления для отправки в геометрический шейдер. Теперь расположите треугольники так, чтобы каждый из них отображал свою часть изображения. Обратите внимание, что после проекции координаты находятся в диапазоне [-1; 1], поэтому вам нужно разделить координаты каждого треугольника на 3, а затем сдвинуть соответствующие треугольники с умножением на 1 / 3. Если вы вычисляете затенение по фонгу на пиксель, вам нужно будет отправить положение камеры фрагментному шейдеру с каждой вершиной, потому что фрагментный шейдер не имеет представления о разделении экрана и у вас есть 9 различных положений камеры.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...