Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
f0x

Зарегистрирован: 23.09.2007 Сообщения: 498
|
Добавлено: Пт Янв 10, 2014 06:56 Заголовок сообщения: boolean на произвольных полигональных объектах |
|
|
Товарищи! Есть вменяемый способ, без написания мегатонн кода? _________________ кто сделал демку тот и выиграл (с) 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
и произвести сие надо на этапе рассчета модели, а не на рендере _________________ кто сделал демку тот и выиграл (с) uncle night (?) |
|
Вернуться к началу |
|
 |
Manwe Администратор сайта

Зарегистрирован: 21.09.2007 Сообщения: 1426
|
Добавлено: Пт Янв 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 писал(а): | Дело в том, что полигональные модели - это поверхности, а не объёмы, причём большая часть из них даже не описывает объём, так как она дырявая, например чайник Ньюэлла. |
"Метаболы" делаются и из торусов, а они тоже с дыркой Ну, я думаю, для начала можно и объёмными фигурами обойтись. |
|
Вернуться к началу |
|
 |
BiTL DOS lover

Зарегистрирован: 22.09.2007 Сообщения: 2950
|
|
Вернуться к началу |
|
 |
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 подробней? из вики нихрена не понял _________________ кто сделал демку тот и выиграл (с) 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
|
|
Вернуться к началу |
|
 |
f0x

Зарегистрирован: 23.09.2007 Сообщения: 498
|
Добавлено: Пт Янв 10, 2014 20:30 Заголовок сообщения: |
|
|
зы. нужен рилтайм, это раз.
определение принадлежности точки пространству - тут хз. форма-то не аналитически задана, сходу методов кроме как отрендерить орто, простите, гонально, фигуру 2 раза (бэк и фронт грани), забрать z-буфер, пройти куб точек отбросив ненужные - не приходит.
ну или проще, сенсилом сделать операцию нужную, забрать з-буфер, восстановить xyz точки. тоже 2 раза, для фронта и бэка.
короче, вычислительная сложность получается запредельной. _________________ кто сделал демку тот и выиграл (с) 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
И с вершинными шейдерами попёрло бы и в реалтайме ) |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|