Как я могу визуализировать отражения в OpenGL ES на iPhone без буфера трафарета?
Я ищу альтернативную технику для рендеринга отражений в OpenGL ES на iPhone. Обычно я делал это, используя буфер трафарета, чтобы отметить, где можно увидеть отражение (отражающую поверхность), а затем визуализировать перевернутое изображение только в этих пикселях. Таким образом, когда отраженный объект удаляется от поверхности, его отражение больше не видно. Однако, поскольку реализация iPhone не поддерживает буфер трафарета, я не могу определить, как скрыть части отражения, выходящие за пределы поверхности.
Чтобы уточнить, проблема не в отображении самих отражений, а в их скрытии, когда они не были бы видны.
Любые идеи?
Ответов (2)2
У меня нет ответа на отражение, но вот как я делаю тени без буфера трафарета, возможно, это даст вам представление:
Я выполняю базовое определение передней / задней поверхности меша с точки зрения источника света. Затем я получаю список всех ребер, которые соединяют передний треугольник с задним треугольником. Я отношусь к этому списку краев как к "петле" линии. Я проецирую вершины этой петли вдоль луча объектного света, пока он не пересечет землю. Эти точки пересечения затем используются для расчета двухмерного многоугольника на той же плоскости, что и земля. Затем я использую алгоритм тесселяции, чтобы превратить этот многоугольник в треугольники. (Это прекрасно работает, если источники света или объекты не двигаются слишком часто.)
Получив треугольники, я визуализирую их с небольшим смещением, чтобы буфер глубины позволял тени проходить. В качестве альтернативы вы можете использовать алгоритм декалей, такой как тот, что указан в Красной книге .