Здравствуйте NWP, Вы писали:
NWP>Здраствуйте NWP>Возник вопрос по поводу отлавлмвания момента столкновения 3д объектов.... NWP>кто что знает прошу подсказать... NWP>заранее спсб!
Для каждого объкта ты можешь завети описывающую
его сферу (в которой он будет целиком находится).
Для начала ты будешь перебирать все пары таких сфер,
и искать их пересечения. Это делается просто:
abs(Xsphere1-Xsphere2)<Rsphere1+Rsphere2.
Для каждой модели ты можешь создать грубую аппроксимацию
состоящую из прямоугольных параллелепипедов.
И если приведенное выше условие выполнилось, то
ишещь пересечение упрощенных моделей.
Если тебя интересует лишь факт пересечения,
то можешь реализовать следующий алгоритм:
Каждую вершину одной из грубых моделей проверяешь на попадание
в какой-нибудь из параллелепипедов второй.
Или пересечение отрезка одной модели с гранью другой.
Не знаю, что тебе еще посоветовать, поскольку ты описал задачу
достаточно в общих чертах.
Правда хочу предупредить, что подобными задачами я не занимался,
и данный способ придумал сам.
Наверняка где-нибудь можно найти алгоритмы решения такой задачи,
Но если ты до сих пор не нашел, может быть тебе поможет то, что
я написал.
Здравствуйте NWP, Вы писали:
NWP>Здраствуйте NWP>Возник вопрос по поводу отлавлмвания момента столкновения 3д объектов.... NWP>кто что знает прошу подсказать... NWP>заранее спсб!
А что именно интересует? Методы обнаружения столкновений объектов или время их столкновения? А то из твоего вопроса ничего не понятно.
Здравствуйте Tolanay, Вы писали:
T>Здравствуйте NWP, Вы писали:
NWP>>Здраствуйте NWP>>Возник вопрос по поводу отлавлмвания момента столкновения 3д объектов.... NWP>>кто что знает прошу подсказать... NWP>>заранее спсб!
T>Для каждого объкта ты можешь завети описывающую T>его сферу (в которой он будет целиком находится). T>Для начала ты будешь перебирать все пары таких сфер, T>и искать их пересечения. Это делается просто: T>abs(Xsphere1-Xsphere2)<Rsphere1+Rsphere2.
T>Для каждой модели ты можешь создать грубую аппроксимацию T>состоящую из прямоугольных параллелепипедов. T>И если приведенное выше условие выполнилось, то T>ишещь пересечение упрощенных моделей.
T>Если тебя интересует лишь факт пересечения, T>то можешь реализовать следующий алгоритм: T>Каждую вершину одной из грубых моделей проверяешь на попадание T>в какой-нибудь из параллелепипедов второй. T>Или пересечение отрезка одной модели с гранью другой.
T>Не знаю, что тебе еще посоветовать, поскольку ты описал задачу T>достаточно в общих чертах.
T>Правда хочу предупредить, что подобными задачами я не занимался, T>и данный способ придумал сам. T>Наверняка где-нибудь можно найти алгоритмы решения такой задачи, T>Но если ты до сих пор не нашел, может быть тебе поможет то, что T>я написал.
Спасибо за ответ.
О таком способе мы тоже думали, однако нам бы хотелось узнать какие есть общепринятые алгритмы (если такие существуют), которыми пользуются девелоперы.
Здравствуйте _Kostya_, Вы писали:
K>Здравствуйте NWP, Вы писали:
NWP>>Здраствуйте NWP>>Возник вопрос по поводу отлавлмвания момента столкновения 3д объектов.... NWP>>кто что знает прошу подсказать... NWP>>заранее спсб!
K>А что именно интересует? Методы обнаружения столкновений объектов или время их столкновения? А то из твоего вопроса ничего не понятно.
Ну вообщето хотелось бы узнать методы обнаружения столкновений для определения времени их столкновения
Здравствуйте NWP, Вы писали:
NWP>Спасибо за ответ. NWP>О таком способе мы тоже думали, однако нам бы хотелось узнать какие есть общепринятые алгритмы (если такие существуют), которыми пользуются девелоперы.
В целом Tolanay прав. Существует множество способов и все они зависят от типа конкретной задачи. В общем случае, для проверки столкновений, используется упрощенная геометрия — сферы, габаритные коробки (bounding box), выпуклые оболочки (convex hull), супер low-poly модели и т.д. что именно использовать и, даже что с чем сталкивать — это нужно решать исходя из требований самой задачи.
Здравствуйте IgorK, Вы писали:
IK>Здравствуйте NWP, Вы писали:
NWP>>Спасибо за ответ. NWP>>О таком способе мы тоже думали, однако нам бы хотелось узнать какие есть общепринятые алгритмы (если такие существуют), которыми пользуются девелоперы.
IK>В целом Tolanay прав. Существует множество способов и все они зависят от типа конкретной задачи. В общем случае, для проверки столкновений, используется упрощенная геометрия — сферы, габаритные коробки (bounding box), выпуклые оболочки (convex hull), супер low-poly модели и т.д. что именно использовать и, даже что с чем сталкивать — это нужно решать исходя из требований самой задачи.
Спасибо за внимание к вопросу.
Конкретная задача состоит в том чтобы реализовать деформацию полигонной модели в соответствии со столкновением
или давлением в какую либо точку модели.
Необходимо установить момент столкновения и его характер.
У нас возник вопрос о решении задачи пересечения многогранников — а именно о методе ее реализации в наиболее простом варианте.
Вы говорили о низко полигональных моделях -- думаю на них решаются похожие задачи -- не могли бы вы подсказать что нибудь в этом направлении.
[skip]
NWP>Спасибо за внимание к вопросу. NWP>Конкретная задача состоит в том чтобы реализовать деформацию полигонной модели в соответствии со столкновением NWP>или давлением в какую либо точку модели. NWP>Необходимо установить момент столкновения и его характер. NWP>У нас возник вопрос о решении задачи пересечения многогранников — а именно о методе ее реализации в наиболее простом варианте.
NWP>Вы говорили о низко полигональных моделях -- думаю на них решаются похожие задачи -- не могли бы вы подсказать что нибудь в этом направлении.
Вот что я нашел в факе ru.opengl:
26 > Как делают пpовеpкy столкновения объектов (Collision Detection) ?
Алгоpитм выглядит пpимеpно так:
Preprocessing (подготовка)
1. Модель pазбивается на выпyклые части (пpогpаммно)
Использyя:
- Тpиангyляция Деланея (нyжна для диагpаммы Воpонова)
- Диагpаммy Воpонова (нахождение ближайшего соседнего скопления
для множества точек)
- Постpоение выпyклых объемов (Convex Hull) над частями объекта.
2. Полyченые части и их выпyклые объемы загоняются в какyю либо иеpаp-
хию, пpи этом сохpаняется связи междy частями. Hапpимеp Octree.
3. Стpоятся описывающие объёмы (Bounding Volumes). Hапpимеp сфеpа (Bo-
unding Sphere). Стpоятся вокpyг всех частей и множества частей.
Query (пpовеpка)
Уpовень 1. Попадание точки в какyю-либо сфеpy (очень пpосто)
Уpовень 2. Попадание точки в выпyклый объём (минимальное количество
гpаней, по сyти является апpоксимиpованой моделью для данной
части).
Алгоpитмов много.
- Точка внyтpи если лежит не ниже ни одной из плоскостей
- Точка внyтpи если осевые лyчи пеpесекли объект нечетное кол-во pаз
Уpовень 3. Вычисление ближайшего скопления множества точек к точки.
Использyя yже основная модель.
Уpовень 4. Пpовеpка пеpесечение с половинным пpостpанством (Halfspace
intersection).
Точка внyтpи, если пеpесеклась с внyтpянним пpостpанством.
Я дyмаю начни с пpостого, а если начнет тоpмозить, то постепенно добавляй
ypовни пpовеpки.
Mike Samsonov
Это только определение столкновения Деформация — это уже отдельный вопрос. Если честно, то чего-то, проверенного практически, у меня нет. Но если порассуждать — здесь необходимо задаться такими вещами как упругость объекта (его сопротивление окружаещему воздействию), жесткость конструкции (насколько локальной будет деформация), направление и сила удара (давления). Сопромат, одним словом А его я, к сожалению, не изучал.
Кстати, сейчас покопался в и-нете, нашел пару ссылок. По крайней мере будет за что зацепиться.