OpenGL ES 2 (iOS) Реализация объемных линий - PullRequest
1 голос
/ 05 января 2012

Я смотрел на эту установку шейдера Volumetric Line, которую создал Philip Rideout: http://prideout.net/blog/?p=61

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

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

1 Ответ

1 голос
/ 05 января 2012

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

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

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

Cylinder raytraced impostors

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

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

...