Как я могу отображать отражения в OpenGL ES на iPhone без буфера трафарета? - PullRequest
5 голосов
/ 27 февраля 2009

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

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

Есть идеи?

Ответы [ 2 ]

9 голосов
/ 27 февраля 2009

Рендеринг отраженной сцены первым; скопировать в текстуру, используя glCopyTexImage2D; очистить буфер кадров; нарисуйте сцену правильно, применив скопированную текстуру к отражающей поверхности.

2 голосов
/ 27 февраля 2009

У меня нет ответа на размышления, но вот как я делаю тени без буфера трафарета, возможно, это даст вам представление:

Я выполняю базовое определение лицевой / задней грани сетки с точки зрения источника света. Затем я получаю список всех ребер, которые соединяют передний треугольник с задним треугольником. Я рассматриваю этот список краев как строку "loop". Я проецирую вершины этой петли вдоль луча объекта-света, пока он не пересечет землю. Эти точки пересечения затем используются для вычисления 2D-многоугольника на той же плоскости, что и земля. Затем я использую алгоритм тесселяции, чтобы превратить это поли в треугольники. (Это работает нормально, если ваши источники света или объекты не двигаются слишком часто.)

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

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