Каркасный рендеринг с буфером глубины при отложенном рендеринге

У меня есть небольшое приложение OpenGL для научной визуализации с отложенным конвейером рендеринга. У меня есть 2 прохода: геометрический проход, в котором я визуализирую текстуры с позициями, нормалями, альбедо, сегментацией и т. Д .; и проход освещения, где я просто сопоставляю некоторые из этих данных с квадроциклом и визуализирую их на экране или даже сохраняю некоторые изображения на жестком диске. Итак, классический отложенный рендеринг.

Теперь мне нужно добавить к дополнительной текстуре каркасный рендеринг. Я думал о том, чтобы сделать это в геометрическом шейдере, но это показалось сложным, и с производительностью не было проблем, поэтому я просто установил третий проход с glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);, где я рендерю его в текстуру, а затем передаю его в проход освещения вместе с прочее.

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

Было бы также нормально визуализировать модель, а затем визуализировать на ней каркас, но я не могу этого сделать, потому что я визуализирую модель в текстуру в проходе геометрии с помощью glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);, а каркас - на другом проходе с помощью glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);, поэтому я вроде как не может использовать буфер глубины по умолчанию.

Итак, у вас есть какие-нибудь мысли?

То, что вы хотите, звучит как «сплошной каркасный рендеринг». См. Это: developer.download.nvidia.com/SDK/10/direct3d/Source/… Также см. Этот ответ: stackoverflow.com/questions/137629/… или это: codeflow.org/entries/2012/aug/02/…

Kai Burjack 31.10.2018 14:27

@httpdigest спасибо, это именно то, что я хотел.

user3051029 31.10.2018 14:34
1
2
325
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хорошо, я решил проблему. Перед реализацией твердого каркасного рендеринга, как предлагал @httpdigest, я попытался просто сохранить буферы глубины из обоих проходов и отрендерить модель поверх каркаса, если глубина меньше, чем глубина каркаса. Получилось в значительной степени то, что мне нужно.

enter image description here

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

Другие вопросы по теме