Как увидеть сгенерированные ребра после тесселяции? - PullRequest
0 голосов
/ 15 ноября 2018

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

При чтении khronos wiki кажется, что для генерации того же поведения, что и GL_LINES, я должен установить вершины патча равными 2 следующим образом:

glPatchParameteri(GL_PATCH_VERTICES, 2)

Однако это приводит к тому же результату, что и

glPatchParameteri(GL_PATCH_VERTICES, 3)

Другими словами, я вижу заполненные треугольники вместо линий. Я рисую, используя GL_PATCHES, и не получаю ни ошибок компиляции, ни времени выполнения.

Как увидеть сгенерированные ребра?

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Если вы не можете использовать режим многоугольника, вы можете использовать геометрический шейдер.Геометрический шейдер - это этап, который выполняется после тесселяции.Таким образом, вы можете иметь геометрический шейдер, который принимает треугольник в качестве входных данных и создает линейную полосу из трех линий в качестве выходных данных.Это покажет каркас.Он также будет рисовать внутренние края дважды.

0 голосов
/ 15 ноября 2018

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

Количество вершин в патче не имеет значения для того, «как моя сетка преобразуется шейдером тесселяции».

Тесселяция основана на абстрактном патче. То есть, если ваш TES использует треугольники в качестве своего абстрактного типа патча , то он будет генерировать треугольники. Это так же верно, если количество вершин на патч 20 или 2.

Задача кода в TES состоит в том, чтобы выяснить, как применить тесселяцию абстрактного патча к данным вершины патча для получения фактических тесселированных выходных данных вершины.

Итак, если вы тестируете треугольник, ваш TES получает 3-элементную барицентрическую координату (gl_TessCoord), которая определяет местоположение в абстрактном треугольнике, для которого создаются данные вершин. Работа генератора примитивов тесселяции состоит в том, чтобы решить, какие вершины генерировать и как собрать их в примитивы (соединение по треугольному краю).

Таким образом, в основном количество вершин патча не имеет отношения к графу связности ребер. Единственное, что для этого имеет значение, - это абстрактный тип патча и применяемые к нему уровни тесселяции.

0 голосов
/ 15 ноября 2018

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

...