luden
Ну, из ссылок сразу на ум пришла вот эта:
http://www.gamedev.ru/articles/?sect=7
там есть небольшой раздельчик "физика".
О подробностях реализации самой анимации и движка физики, я писал вот тут:
http://forum.igromania.ru/showpost.p...6&postcount=15
А с перебором объектов вынужден огорчить - его не избежать. Его можно лишь оптимизировать. Путей тут два - уменьшать количество участвующих объектов и упрощать алгоритм, вращаемый в цикле перебора.
Первое, самое эффективное - это наделение визической модели столкновений особой иерархией, позволяющей отсеять объекты, которые совершенно точно не взаимодействуют. Второй - наделение объектов упрощенными представлениями о своем строении для ускорения обсчета первого метода.
Например, первый метод можно построить на секторах - особых "кубиках" в пространстве. При перемещении объект определяет, в каком кубике он находится. При определении столкновений обсчитываются только объекты, принадлежащие одному и тому же кубику. НА первый взгляд может показаться, что слишком сложно. Но на самом деле такой алгоритм экономит часть времени. Допустим, у нас абсолютно трехмерное пространство, и принадлежность сектору определяется тремя числами целого типа, соотвестственно положению сектора в пространстве. Пространство делится на сектора-кубы со сторонами по 100 условных единиц пространства. Обратите внимание, что для того, чтобы пересчитать индексы секторов, необходимо текущую координату просто поделить на 100 и преобразовать в целое (обрезать дробную часть). В то время, как для того, чтобы определить столкновение между объектами, нужно как минимум преобразовать матрицы ориентации объектов в пространстве, для того чтобы определить пересечение полигонов или BoundingBox'ов (окружающих параллелепипедов). Таким образом, при обходе объектов, мы сравниваем их сектора, если совпадают - считаем пересечения. Если нет - отбрасываем.
Алгоритм хорош, но требует доработок на предмет случая на границе двух секторов.
Воторой метод основывается на том, чтобы вокруг физической модельки (физбокса) обрисовать параллелепипед - его намного проще проанализировать на столкновение с аналогичным параллелепипедом, чем, скажем, выпуклый многоугольник.
Его идейное продолжение - еще в процессе загрузки модели узнать максимальное расстояние от центра масс объекта до одной из точек-вершин параллелепипеда. После чего при алализе столкновений сравниваем расстояние между центрами масс двух объектов с суммой расстояний до параллелепипедных вершин, и если оно меньше или равно, обсчитывать уже BoundingBox'ы.