2013-04-05 6 views
1

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

Но реальная проблема заключается в том, что у меня, например, есть один полупрозрачный куб, белый (или любой другой цвет) и с альфа-значением, например, 0,5. Внутренняя структура куба задана в файле obj волнового фронта, поэтому задан порядок одиночных плоскостей куба. Я не заказываю одиночные плоскости объекта, потому что это было бы слишком много в сцене с> 1000 объектами и> 1000 вершинами каждого объекта, поэтому я просто заказываю объекты целиком. Если я выношу одиночные плоскости объекта и перемещаюсь, наступает момент, когда одна плоскость, которая ближе, чем другая, отображается перед другим. И тогда второй не отображается, потому что буфер глубины не позволяет это, что является ошибкой в ​​рендеринге.

Завершение буфера глубины не является решением: мне это нужно, потому что могут быть сложные объекты, которые являются полупрозрачными и непрозрачными.

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

ответ

3

В основном вы должны сделать следующее:

  • Отдельного все в непрозрачные и полупрозрачные (если один объект состоит как вы должны разорвать его аппарт)

  • Очистить буфер глубины

  • Включите проверку глубины и нарисуйте все непрозрачное.

  • делают буфер глубины только для чтения: glDepthMask (GL_FALSE)

  • рисовать все полупрозрачный задом наперед.

Это должно сделать трюк.

+0

Хорошо, но проблема в том, что «назад к фронту» означает, что я должен заказать его. Это упорядочение должно быть на каждом треугольнике из-за приведенного выше сценария. Но это может быть слишком много. Есть ли способ сделать это с помощью шейдера? – user2248673

+0

Нет, это невозможно сделать с помощью шейдера, поскольку он обрабатывает треугольники независимо. Точно делать рендеринг полупрозрачных объектов сложно. Даже если вы отсортируете каждый треугольник, у вас могут быть ошибки из-за пересечения треугольников и т. Д. Не можете ли вы жить с ошибкой при сортировке на уровне объекта? вы должны найти компромисс между скоростью и точностью здесь. – Dirk

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

  • Нет связанных вопросов^_^