www.demoscene.ruenglish version
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
boolean на произвольных полигональных объектах
На страницу 1, 2, 3, 4  След.
 
Начать новую тему   Ответить на тему    Список форумов DemoScene.Ru -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 498


СообщениеДобавлено: Пт Янв 10, 2014 06:56    Заголовок сообщения: boolean на произвольных полигональных объектах Ответить с цитатой

Товарищи! Есть вменяемый способ, без написания мегатонн кода?
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mikle



Зарегистрирован: 02.12.2008
Сообщения: 432
Откуда: Туапсе

СообщениеДобавлено: Пт Янв 10, 2014 09:17    Заголовок сообщения: Ответить с цитатой

Стенсил?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 498


СообщениеДобавлено: Пт Янв 10, 2014 12:42    Заголовок сообщения: Ответить с цитатой

разверну: есть две пересекающихся как-либо полигональных колбасы (форма произвольна). на выходе нужно тоже полигональную колбасу.

http://www.madwomb.com/tutorials/imgMaya/MAYAp4i.jpg

и произвести сие надо на этапе рассчета модели, а не на рендере
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Manwe
Администратор сайта


Зарегистрирован: 21.09.2007
Сообщения: 1424


СообщениеДобавлено: Пт Янв 10, 2014 12:57    Заголовок сообщения: Ответить с цитатой

f0x писал(а):
разверну: есть две пересекающихся как-либо полигональных колбасы (форма произвольна). на выходе нужно тоже полигональную колбасу.

На твоём JPG объекты не произвольные, а простые. И это хорошо. Этого уже достаточно, ИМХО.
_________________
Manwe/SandS
www.manwe.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 12:58    Заголовок сообщения: Ответить с цитатой

f0x писал(а):
разверну: есть две пересекающихся как-либо полигональных колбасы (форма произвольна). на выходе нужно тоже полигональную колбасу.

http://www.madwomb.com/tutorials/imgMaya/MAYAp4i.jpg

и произвести сие надо на этапе рассчета модели, а не на рендере


Может Marching cubes? Только обычно это метаболлы, но помоему ничто не мешает построить и "обратную" полигональную решётку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 13:10    Заголовок сообщения: Ответить с цитатой

Manwe писал(а):

На твоём JPG объекты не произвольные, а простые. И это хорошо. Этого уже достаточно, ИМХО.


Да какая разница, он же хочет откусить от произвольного объекта ту часть которая пересекается с другим произвольным объектом.

Мне на вскидку кажется что проще всего решается алгоритмом "шагающих кубов" http://ru.wikipedia.org/wiki/Marching_cubes

А иначе нужно кучу матана написать )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mikle



Зарегистрирован: 02.12.2008
Сообщения: 432
Откуда: Туапсе

СообщениеДобавлено: Пт Янв 10, 2014 13:29    Заголовок сообщения: Ответить с цитатой

Дело в том, что полигональные модели - это поверхности, а не объёмы, причём большая часть из них даже не описывает объём, так как она дырявая, например чайник Ньюэлла.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 13:37    Заголовок сообщения: Ответить с цитатой

Mikle писал(а):
Дело в том, что полигональные модели - это поверхности, а не объёмы, причём большая часть из них даже не описывает объём, так как она дырявая, например чайник Ньюэлла.


"Метаболы" делаются и из торусов, а они тоже с дыркой Smile Ну, я думаю, для начала можно и объёмными фигурами обойтись.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 18:52    Заголовок сообщения: Ответить с цитатой

Ладно, может ссылочки в статье http://en.wikipedia.org/wiki/Constructive_solid_geometry наведут на готовое решение, или внятный разбор алгоритма

и ещё:

http://arxiv.org/pdf/1308.4434.pdf - сорри, на английском

http://www.gamedev.ru/code/forum/?id=61605 - тред на гэймдеве, люди делятся ссылками, может чтото есть полезное
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 20:02    Заголовок сообщения: Ответить с цитатой

И всё же, на всякий случай, объясню, как я собирался применять Marching cubes для того, что хочет f0x:

Алгоритм "Шагающих кубиков" нам предоставляет простую возможность построить полигональную поверхность по некоему произвольному масиву вокселей, правильно? (поправочка: да, желательно, не по произвольному, а содержащему значения расстояния до поверхности)





Значит, нам ещё нужен алгоритм, который будет определять принадлежность точки пространству ограниченому поверхностью. Если нам не важен реалтайм, то думаю тут сложности не будет?

Далее, у нас есть два объекта, которые пересекаеются. Положим нам нужно откусить от объекта А объектом В.

После чего сканируем всё пространство занимаемое двумя объектами, строя 3д-решётку (точность (шаг) понятное дело опциональна, и повлияет на качество результата), и проверяем каждую точку, принадлежит ли она объекту А, и принадлежит ли объекту В, отбрасываем (записывая ноль в сетку вокселей) точки принадлежащие обоим объектам и, соответственно объекту В.
Если стараться впоследствии создать гладкий объект, то для остальных вокселей считаем кратчайшее расстояние до поверхности (потенциал), в этом нам может помочь нормаль к полигону изначального объекта, я думаю.

Получаем масив вокселей, с нужным воксельным "откушеным" объектом. И далее по нему с помощью Marching Cubes строим полигональную поверхность.

Если применить тесселяцию, которая сейчас вроде нахаляву DirectX'ом предоставляется, то получаем вполне неплохой результат.

Точность результата конечно отсасывает перед "матановским" правильным способом, а оптимальность полигонизации будет неахти, но зато вроде не сложно?

Зато так можно строить какие-нибудь вот такие крутые штуки:





Я не пробовал, это просто идея )


- - - - - - - - - - - -

Алсо, а может октодеревья? http://habrahabr.ru/post/133769/


Последний раз редактировалось: BiTL (Пт Янв 10, 2014 21:00), всего редактировалось 7 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 498


СообщениеДобавлено: Пт Янв 10, 2014 20:13    Заголовок сообщения: Ответить с цитатой

Битл, можно про marching cubes подробней? из вики нихрена не понял
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 20:15    Заголовок сообщения: Ответить с цитатой

f0x писал(а):
Битл, можно про marching cubes подробней? из вики нихрена не понял


попробуй про 2D-вариант почитать: http://ru.wikipedia.org/wiki/Marching_squares

и потом представить, что это для 3д.

ЗЫ: ну, метаболлы же так и рисуются, только там вместо произвольного массива вокселей функция сферы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 20:29    Заголовок сообщения: Ответить с цитатой

Ах да, тут ещё важен один момент. Почитай тред: http://www.gamedev.ru/code/forum/?id=172725
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
f0x



Зарегистрирован: 23.09.2007
Сообщения: 498


СообщениеДобавлено: Пт Янв 10, 2014 20:30    Заголовок сообщения: Ответить с цитатой

зы. нужен рилтайм, это раз.
определение принадлежности точки пространству - тут хз. форма-то не аналитически задана, сходу методов кроме как отрендерить орто, простите, гонально, фигуру 2 раза (бэк и фронт грани), забрать z-буфер, пройти куб точек отбросив ненужные - не приходит.
ну или проще, сенсилом сделать операцию нужную, забрать з-буфер, восстановить xyz точки. тоже 2 раза, для фронта и бэка.
короче, вычислительная сложность получается запредельной.
_________________
кто сделал демку тот и выигралSmile (с) uncle night (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
BiTL
DOS lover


Зарегистрирован: 22.09.2007
Сообщения: 2950


СообщениеДобавлено: Пт Янв 10, 2014 20:37    Заголовок сообщения: Ответить с цитатой

f0x писал(а):
зы. нужен рилтайм, это раз.


Тогда ой. Я думал что это только для моделинга.

Это тогда надо круто засесть за код и оптимизировать всё похакерски ) Или юзать такой метод для довольно простых объектов.

Ну, зато, с вокселизацией+marching cubes можно было бы клёвые штуки из сфер, кубов и прочих платоновых тел забахать.

или пещеры всякие http://www.robertknoester.com/wp-content/uploads/2013/04/perlinNoise.png

И с вершинными шейдерами попёрло бы и в реалтайме )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов DemoScene.Ru -> Программирование Часовой пояс: GMT + 3
На страницу 1, 2, 3, 4  След.
Страница 1 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах