Показать сообщение отдельно
Старый 13.12.2007, 20:58   #3
Пугатель
 
Аватар для [CCCP] Monster

 
Регистрация: 26.06.2005
Адрес: Москва, СССР
Сообщений: 6,103
Репутация: 1085 [+/-]
luden

Ну, из ссылок сразу на ум пришла вот эта:
http://www.gamedev.ru/articles/?sect=7

там есть небольшой раздельчик "физика".

О подробностях реализации самой анимации и движка физики, я писал вот тут:

http://forum.igromania.ru/showpost.p...6&postcount=15


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

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

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

Алгоритм хорош, но требует доработок на предмет случая на границе двух секторов.

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

Его идейное продолжение - еще в процессе загрузки модели узнать максимальное расстояние от центра масс объекта до одной из точек-вершин параллелепипеда. После чего при алализе столкновений сравниваем расстояние между центрами масс двух объектов с суммой расстояний до параллелепипедных вершин, и если оно меньше или равно, обсчитывать уже BoundingBox'ы.
__________________
Служу Советскому Союзу!

Хорошо смеется тот, кто стреляет первым! (танкистская мудрость)
[CCCP] Monster вне форума  
Отправить сообщение для [CCCP] Monster с помощью Skype™