2013-02-16 3 views
0

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

Итак, как на самом деле визуализируются NURBS, с точки зрения трубопровода (высокого уровня)?

+0

Как вы упомянули - путем многократного разбиения поверхности до тех пор, пока не будут выполнены некоторые критерии «плоскостности», и в этот момент они отображаются как треугольники. –

ответ

4

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

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

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