NURBS в графическом конвейере OpenGL

Мне интересно, как NURBS визуализируются в графическом конвейере графических процессоров / OpenGL. Я понимаю, что в OpenGL и GLUT существуют различные вызовы для простого рендеринга объектов NURBS с точки зрения кодирования с использованием glMap и glMapGrid, но чего я не понимаю, так это процесса, через который проходит OpenGL. Идея NURBS заключается в использовании кривых для определения поверхностей, тогда как графический конвейер создается вокруг растеризации треугольника и треугольных сеток, тогда как NURBS основан на кривых Безье, которые изогнуты.

Так как же на самом деле рендерится NURBS с точки зрения (высокого уровня) конвейера?

1 ответ

Решение

Простой ответ заключается в том, что они не рассматриваются в конвейере OpenGL, а должны быть преобразованы в нечто, что может обрабатывать конвейер GL. Общий подход, вероятно, заключался бы в том, чтобы сначала преобразовать в примитив немного более дружественный в реальном времени, такой как патчи Безье, а затем тесселять их во время выполнения в треугольники.

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

glMap() et-al (которые ранее использовались для визуализации исправлений Безье и т. д.) устарели и больше не присутствуют в современном OpenGL API. В настоящее время вы используете шейдеры для работы с тесселяцией.

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