LinuxForum.Fans
Тема

NURBS OpenGL

Автор: ink 14 сообщений 8535 просмотров
#8812

Скажите правильно я понимаю? Что в OpenGL уже есть функции NURBS кривых, поверхностей, и операций с ними (отрезание, сшивка и т.д)
И знание математики только поможет в программировании, но не кретично?
И я так понял, что велосипед изобретать мне не прийдеться, все функции для работы с NURBS уже написаны в GL , надо их просто применить правильно?
Если все так, тогда зачем написали библиотеку OpenNurbs, Nurbana и в чем их принципиальные отличия от GL ?

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

#8820
ink написал:
Что в OpenGL уже есть функции NURBS кривых, поверхностей, и операций с ними (отрезание, сшивка и т.д)

Не-а, нету там NURBS. Только поддержка низкоуровневых операций для работы с графикой. Вот в распространенной высокоуровневой надстройкай надо OpenGL GLU NURBS уже поддерживаются.

ink написал:
И знание математики только поможет в программировании, но не кретично?

Смотря в каком программировании в т.н. "быдлокодинге" не критично, но если заниматься чем-нибудь действительно интересным исложным - уже никак без математики.

ink написал:
И я так понял, что велосипед изобретать мне не прийдеться, все функции для работы с NURBS уже написаны в GL , надо их просто применить правильно?

В GLU - да, не знаю насколько уж там все. Все - понятие относительное.

ink написал:
Если все так, тогда зачем написали библиотеку OpenNurbs, Nurbana и в чем их принципиальные отличия от GL ?

Просто дополнительные библиотеки для работы с графикой. В отличие от OpenGL не слишком известны.

ink написал:
Я вот в умной книге прочитал что одним из хороших правил программиста - это использование уже готового кода!

Смотря какого кода. Если этот готовый код простестирован и нормально работает, почему бы и нет.

ink написал:
Есть ли в GL функции по подсчету , площади, сил которые приложены на поверхность или кривую и т.д.?

Это вряд ли. Не надо забывать, что OpenGL и его надстройки больше ориентированы на работу с графикой, а физику придется самому считать.

#8838

Большое спасибо за ответ.
Т.е. OpenGL GLU NURBS, OpenNurbs и Nurbana это одно и то же - разные библиотеки для работы с графикой?
Для новой программы, лучше использовать уже сущ. библиотеку или написать свою.
Формулы по которым строиться кривые одни и те же! Только вопрос в том на сколько быстро работаю данные библиотеки, и насколько они расширяемые?

Собираюсь начать писать NURBS парамметрическую CAD сиситему для архитекторов и дизайнеров.(опенсурс, кросс) Полностью 3d с элемментами черчения.
В будущем хочу потехоньку дописывать расчетные модули.

Сейчас учу С++/Qt и читаю книги по геометрии и NURBS в математике.

Что посоветуете

#8849
ink написал:
Т.е. OpenGL GLU NURBS, OpenNurbs и Nurbana это одно и то же - разные библиотеки для работы с графикой?

Да, но у каждой есть свои особенности. К примеру, OpenNurbs больше заточена под вашу задачу - построение CAD-системы.

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

Смотря чего вы хотите добиться и чему научиться. Если просто надо программу - лучше использовать уже существующую систему, желательно, конечно убедиться по отзывам пользователей, что она достаточно стабильна. (посмотрите подробнее OpenNurbs) В целях обучения можно попробовать написать свою. Скажем, самому построить сплайны. Но для отображения графики все равно лучше использовать готовую OpenGL.

ink написал:
Только вопрос в том на сколько быстро работаю данные библиотеки, и насколько они расширяемые?

Вот это сложный вопрос. Тут надо иметь опыт работы со всеми этими бибилиотеками, а у меня его нет. Если не хотите рисковать и самостоятельно все проверять - остановитесь на GLU.

ink написал:
Сейчас учу С++/Qt и читаю книги по геометрии и NURBS в математике.

Что посоветуете

По вашей специфике лучше делать больший упор на C++ и математику с NURBS'ом. QT несколько в стороне находится от всего этого. И, по-моему, он будет даже мешать отвлекая от главной темы и насаживаю свою, не самую лучшую скажем так, модель программирования. Все-таки C++ не тот язык где стоит создавать огромные иерархии классов.

По С++ могу посоветовать читать Скота Майерса и Николая Джосьютиса (по библиотеке STL). Вообще, изучить STL и посмотреть boost (там много всего полезного найдете).
По математике мне сложнее что-то посоветовать, т.к. у меня другая значительно отличающаяся область.

#8866

ок. Все понял.
Книжка Майерса есть, хорошая. У него и видео на youtube есть тоже хорошие.

Спаибо, буду рыть дальше.

Сейчас так много клонов Автогкада, куда не плюнь, а хорошей системы парамметрического моделирования нет (под Линукс, да и кроссовой).
Сейчас Рино под Мак делают но никто его на Линь не перепишет :(
Вот и взялся за такое не легкое дело.

Еще раз спасибо.
Если у кого-то будут еще советы, я с удовольствием послушая

#9121

OpenNurbs не имеет никакого отношения ни к NURBS, ни к сплайнам, ни к линиям. Это просто библиотека io для 3dm-файлов. А те функции которые Вы описываете скрыты в API Rhino. А точней, если мне не отшибает память, в библиотеках Solid Modeling Solutions.

Nurbana не имеет таких понятий как пересечение (поиск линий или поверхностей являющихся результатом пересечений других поверхностей); эквидистанта; стыковка поверхностей с соблюдением условий G1, G2, G3. Она не собиралась на x86-64 линуксах (да в 2005 году их и не было).

#9265

TuxWare,
Да, Вы правы я вчера почитал про OpenNurbs.
А что посоветуете? Писать свое ядро и свои библиотеки NURBS?
Подскажите, а то я только начел в этом разбираться, опыта почти нет.
Литература, линки на другие проекты....

Заранее спасибо

#9643

Да, свое ядро позволит реализовать любые идеи. Берете в руки "The NURBS book" (авторы Piegl, Tiller) и дерзаете. Но даже в этой книге Вы не найдете многих вещей. Та же эквидистанта. Построить явно эквидистанту к NURBS кривой невозможно. Вы покопаетесь в научных трудах и патентах на них. Корейцы предложили, на мой взгляд, очень интересную идею. NURBS конвертируется в кривую Безье. К кривой Безье строится эквидистанта аналитически (я надеюсь это Вам известно). Затем находятся точки взаимо-пересечений и отсеиваются петли. Куски сливаются в одну кривую Безье, а потом она конвертируется обратно в NURBS. А теперь представьте механизм поиска offset для поверхности. Вы не обижайтесь, но у меня есть сомнение, что Вы это потяните. Вы занимаитесь математикой профессионально, какое у Вас научное звание?

Реальные идеи.
1. http://www.smlib.com/ - они утверждают, что их библиотеки опен соурс. Эти библиотеки используют рина, автодеск, солидворкс. Но прийдется связываться с ребятами по почте и делать запрос. По крайней мере я не нашел кнопку "скачать".
2. Берете готовую библиотеку более высокого уровня (теряя гибкость) и дорабатываете. Лучшие предложения здесь OpenCascade и Coin3D. Coin3D (бывший SGI Inventor) имеет лицензию GPL плюс к нему есть привязка SoQt, SoWin и т.д. Но OpenCascade имеет больше возможностей, на ее основе делается Catia. OpenCascade - это не свободная библиотека, не пытайтесь ее изменять или брать код с нее. У меня даже есть сомнения сможете ли Вы ее распространять вместе со своей программой. Но в этом вопросе я могу ошибаться.
3. Берете любую подходящую программу (Рина или архитектурный автокад) и пишите плагины.

Чем выше пункт тем быстрей разработка.

#9915

Знание математики на уровне ВУЗа (высшая математика).Сейчас читаю книгу "комп. геометрия и алгоритмы" Никулина, когда что-то не понятно спрашиваю советов на форумах, да и справочники листаю.
По профессии я архитектор. Программирование и этой идеей занялся как хобби.
Спасибо за книгу.
Действительно так сложно?

TuxWare, ialexander

Если Вам еще что-то в голову прийдет, я как начинающий с удовольствием послушаю.

Общался на форуме с программистами Blender , они сейчас делаю Nurbs дополнение пишут на С и сказали что С++ очень мало используют.
Опираються на Nurbana. Сегодня поковырял , пока очень мало функционала, есть кривые, создание поверхности путем вращения , путем выдавливания.
OffSet'а нет говорят его еще долго не будет, так мало людей и все работают добровольно.

Мне кажеться что основные функции можно написать и это не так уж сложно, главное чтобы ядро заработало, а потом в него дописывать всякие нужные вещи. (Время есть это же не коммерческий проект, а хобби)?!

С уважением,
Ink



Товарищи,
Может кто-то еще знает открытые библиотеки NURBS?

#68995

осле долгого отсутствия, продолжаю заниматься программированием С++.
Пока изучение С++ на уровне написания маленьких программ типа калькулятора базы данных семейного бюджета smile.gif и еще написал в офисе прогу контроля выполнения проектов с графиком времени. Но это все в очень примитивных графических оболочках до NURBS и OpenGL не дошел. И вот свежие вопросы smile.gif

Посмотрите ссылки.(видео и картинки) Архитектурная компания которая создала группу разработчиков маленьких программ для архитекторов. Говорят что пишут в Java и OpenGL.
Подскажите:

1. На сколько сложные эти примеры и намного ли они станут сложнее если туда добавит функции рассекания объектов?
2. Если это у них Nurbs, то они скорее всего используют уже готовую библиотеку?
3.Интересно как они в свою программу загоняют 3D объекты? И можно ли их экспортировать от туда?

http://aedasresearch.com/features/view/all...e-for-wingardhs
http://aedasresearch.com/features/view/all...ect/fxy-seating
http://aedasresearch.com/features/view/all...cies-and-layout

#69165

Примеры по этим ссылкам не открываются, но через гугл находятся.
Сам-то не специалист по этим делам, но моделированием физики и OpenGL занимался.

1, 2
Насчёт башни.. ох, не архитектор я... видимо методом конечных элементов моделировали внешнюю часть здания (что внутри - х3), как там написано, выбирали паттерны из различных вид стекол, либо чтоб не развалилось, достичь какого-то эффекта, и чтоб было подешевле. Что внутри , за внешностью - х3.
Скорее всего это не НУРБС, т.к. в НУРБС задаются опорные точки, и по ним определяются остальные. Здесь-же для каждого элемента имеется своё значение параметра (вид стекла, видимо).
Алгоритм для моделирования - не знаю какой сложности, всё зависит от учитываемых свойств материалов. Но моделирование методом конечных элементов по сути не сложное, но зато кушает компьютер - оптимизировать надо, что сложнее гораздо.

Второй пример - там, видимо, построили объект по заданной функции. Насчёт НУРБС - возможно использовались. Что там моделировали - не понятно.


3. Для 3д объектов свой формат у них скорей всего, т.к. там не чистая 3д форма.

А что хотите моделировать?

ЗЫ, ИМХО, с Qt будет проще.

#69201

Хочу начать с маленьких программ. Моделировать Нурбс объемы (формы концепции здания) потом дописывать части программы которые смогут разные виды остекления равномерно располагать на сложной Нурбс поверхности.

Как тут:
http://www.archi.ru/foreign/guide/object_current.html?oid=155&fl=2&sl=3 - здание и его фасадная система (каждый треугольник разных размеров, ручками долго чертить а программа сможет сделать развертку этого дела)

http://www.forma.spb.ru/magazine/articles/t_007/main.shtml - купол

Что посоветуете в плане программирования.Что почитать с чего начать. Нужные библиотеки. Может открытые библиотеки Нурбс?

#69249

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

Например вы задаёте 2д арку:

text

x-----------x
|    ---    |
|   /   \   |
|  /     \  |
|  |     |  |
x--x     x--x

Там 6 точек. Допустим на арку кладётся плита (образно). Тогда вам надо иметь аналитическое выражение для просчёта нагрузки\давления и т.п. (извините, я не архитектор) для каждой точки и распределения по всей арке, в частности и в узком месте. Т.к. нурбс разбивается на точки, то примерно это будет выглядеть так: (для примера!)

text

x--x-x-x-x--x
|  | | | |  |
x--x-x-x-x--x
|  |/   \|  |
x--x     x--x
|  |     |  |
x--x     x--x

как мне представляется, расчёт идет в специализированном НУРБС-движке. Что это такое и с чем едят - страшная для меня тайна.
GLU библиотека позволяет получать уже разбитую на точки поверхность. Т.е. вы просчитываете взаимодействие не плиты и арки, а кусочков из которых они состоят. Здесь возможно теряется производительность, по сравнению с использование физического НУРБС-движка. Другими словами - опенЖЛ можно использовать для формирования обычных полигональных моделей из нурбс объектов. Хотя... разбить поверхность - одно, а объем другое. Т.е нужны "кирпичи".

Посоветовал-бы задать вопрос на специализированном форуме, на МГУ-шном каком-нибудь. Там профессора могут ответить. Задача сводится сначала к выбору метода моделирования. Так-ли нужны НУРБС? Если нужны, то остаётся поднять необходимую математику...или движок найти.

Насчёт программирования могу посоветовать только необходимый минимум, Qt для GUI среды разработки + ОпенЖЛ.
Родная документация для Qt (Qt Assistent) вполне достаточна, если не смущает, что на английском.
Для опенЖЛ - подойдёт любая книжка, да и в QtAssistent есть необходимый минимум. Могу выделить http://pmg.org.ru/nehe/ - хороший источник, имхо.
На опенЖЛ поначалу не стоит делать упор, т.к. основным потребителем ресурсов будет движок. VBO, шейдеры, сглаживания, и всё остальное - не нужно, достаточно обыкновенного выводы цветных вершин + стандартное освещение. Лучше сразу освоить вывод текста и выбор вершин\погигонов. В Qt вывод текста крайне прост - поэтому советую именно Qt.
Если надо будет рендерить красивую картинку, то придётся писать либо свой формат файла, для сохранения либо искать подходящий, чтоб в блендере открыть (для своего формата и плагин тогда надо).

#69281

Спасибо. Сайт хороший.

Войдите или зарегистрируйтесь, чтобы ответить.