2012-01-04 2 views
0

Я смотрел на эту установку шейдера Объемный Line, который создал Филипп Райдаут: http://prideout.net/blog/?p=61OpenGL ES 2 (IOS) реализация Объемный Линии

К сожалению, его реализация не работает для OpenGL ES 2. Перед тем, как начать расследование в глубину о том, как я мог бы сделать что-то подобное, но с установкой OpenGL ES 2, я хотел бы обсудить, как это может быть достигнуто, и, конечно, если у кого-то уже есть эта работа, возможно, они могут поделиться некоторыми мыслями.

Похоже, что для этого потребуется работать с OGL ES 2, создавая набор вершин, которые образуют треугольную полосу с призмой, созданной из информации о линии.

ответ

1

Я делал излучатели с острием цилиндров, как он описывает в OpenGL ES 2.0. Это немного сложнее, чем с настольным OpenGL, но это возможно.

Для этого я подал четыре вершины для каждого цилиндра (в начальной точке центральной линии для цилиндра), а также вектор направления от начала до конца для цилиндра. В вершинном шейдере я смещал четыре вершины в пространстве экрана, чтобы покрыть область, которая удерживала бы цилиндр с растрами. В флеш-шейдере я вытягиваю четкое представление этого цилиндра.

Эта схема демонстрирует общий процесс:

Cylinder raytraced impostors

Что делает это немного сложнее на OpenGL ES 2.0 является то, что мы не имеем возможности писать в gl_FragDepth для того, чтобы обрабатывать перекрытия из двух твердых цилиндров. Я закончил делать предварительный проход, где я отображал глубину каждого фрагмента цилиндра на внеэкранную текстуру, а затем использовал эту глубинную текстуру на этапе трассировки лучей, чтобы отменить невидимые фрагменты.

Немного более подробную запись этого процесса можно найти here, а исходный код для моего приложения можно скачать с here. Я предупреждаю вас, что математика глубины и raytracing не идеальна для моих цилиндров в этом приложении, и я все еще работаю над ее исправлением.

+0

Интересный Бред. Таким образом, решение о перекрытии, которое вы упомянули, создает фаску, в которой соединяются два цилиндра? – Claudia

+0

@Claudia - Да, хотя в моем случае перекрытие было чаще между сферой и цилиндром, сферой и другой сферой. Значение глубины, выписанное как цвет для первого прохода, является самой близкой глубиной любого объекта к камере на этом фрагменте, поэтому соответствующее пересечение рисуется на более поздней стадии трассировки лучей. Вы можете увидеть пересечения сферных цилиндров на скриншоте здесь: http://sunsetlakesoftware.com/image/caffeine-ipad?size=_original –

Смежные вопросы