Как насчет ядра NURBS и opengl 4.2?

Глава NURBS в RedBook считается устаревшей, включая служебную библиотеку: «Несмотря на то, что некоторые из этих функций являются частью библиотеки GLU, они основаны на функциях, которые были удалены из основной библиотеки OpenGL».

Означает ли это, что в OpenGL 4.2 на самом деле отсутствует инструментарий C++ для управления кривыми и поверхностями NURBS? Есть некоторые коммерческие сторонние наборы инструментов, но они не кроссплатформенные (в основном Windows)

...?


person Ahk4iePaiv8u    schedule 12.06.2012    source источник
comment
Пожалуйста, добавьте информацию, для чего вам нужен NURBS.   -  person przemo_li    schedule 11.08.2012
comment
Я пытаюсь добиться эффекта, похожего на развевание баннера на поверхности, но я хотел бы получить красивое беспорядочное движение, отличное от простого волнения. Управление позициями узлов кажется намного лучшим способом, чем влияние на отдельные вершины примитивов.   -  person Ahk4iePaiv8u    schedule 12.08.2012


Ответы (2)


В OpenGL-3 и более поздних версиях в вашем распоряжении геометрия и вершинные шейдеры, OpenGL-4 даже предоставляет шейдеры тесселяции. Они предлагают все для реализации NURBS и сплайнов и поверхностей Безье с ускорением на графическом процессоре. Оценщики OpenGL-1.1 никогда не использовали GPU-ускорение на большинстве аппаратных средств. Так что на самом деле вам лучше без них.

Просто внедрите в шейдеры оценщики NURBS или Безье и отправьте вершины в качестве точек выборки поверхности.

person datenwolf    schedule 12.06.2012

Что касается вашего вопроса о Красной книге, библиотека GLU не была официально объявлена ​​устаревшей OpenGL ARB, а просто проигнорирована. Однако GLU использовал функции, которые устарели в OpenGL 3.0 и были удалены в OpenGL 3.1: рендеринг в непосредственном режиме, списки отображения, матричные стеки и многие другие. Что касается NURBS, они использовали некоторые из этих функций (предполагая, что библиотека GLU, связанная с вашей реализацией OpenGL, была основана на версии SGI GLU, что было в большинстве случаев), и поэтому функции просто не будут работать в основном контексте. Дело не в отсутствии библиотеки GLU на основе C++, а в том, что GLU использует функции, удаленные из современного OpenGL.

@datenwolf - не совсем так. Библиотека GLU NURBS поддерживала кривые обрезки, которые сложно реализовать во всех случаях с использованием конвейера вершинных шейдеров OpenGL (т. е. только затенение вершин, тесселяции и геометрии). В частности, поддержка правил намотки и правильной обрезки при соблюдении пересечений кривых обрезки чертовски сложна (это может быть возможно с комбинацией вычислительных шейдеров и сложной работы в фрагментном шейдере). Вы можете взломать обрезку с помощью альфа-текстуры, но вы пострадаете от сглаживания результатов, но это быстрое решение.

person radical7    schedule 21.01.2013