|
pokibor
А как мы поймем, какая физика нам нужна? Как ты говорил, мы же не движок просто делаем, а игру. Давай вот как поступим. Напиши в отдельной теме последовательность работ по проектированию, которые ты считаешь нужным провести в ходе разработки.
Насчет физики - не совсем ясно, 2Д или 3Д, но поскольку упомянуты сферы, пусть будет 3Д.
Я считаю, что физику следует построить на основе выпуклых пространственных многоугольников. На их основе легче всего строить системы обнаружения столкновений. Какой алгоритм будет - я напишу.
По физике вообще. Любой объект, с которым возможно взаимодействие в игрвом мире должен обладать несколькими основными параметрами. Во-первых - скорость. Думаю, представить ее в виде вектора. Длина вектора будет у нас величиной скорости. Второй параметр линейного движения - ускорение, представим аналогично скорости. Теперь движение вращательное. Моменты инерции, моменты сил, действующих на тело. Результат их действия можно задавать как скорсоть вращения. Задаваться будет плоскость вращения и угловая скорость враения в рад/с.
Эти параметры в процессе обсчета движения будут влиять на самый основной параметр любого объекта - матрицу положения в пространстве, которая в сочетании с видовой матрицей дает возможность взглянуть на объект по ту сторону монитора.
Не менее важным параметром является точка - центр масс. Центр масс, думаю, нужно считать в локальных координатах объекта (т.е. на его пространственное положение действует вышеописанная матрица положения объекта).
Плюс к этому будет введен элемент - сила, действующая на тело. Исходя из массы объекта можно посчитать ускорение объекта. Также моменты сил и инерции можно посчитать. В остальном физика фактически легко программируется с помощью этой физической модели.
Важное дополнение:
Также есть параметр "дельта времени" - время, которое занял обсчет игрового цикла (время между сменой кадров, величина, обратная FPS). Это время будет использоваться для расчетов физики и изменений в сцене. К примеру, для того, чтобы вычислить, на сколько нужно переместить объект, обладающий скоростью v=1м/с, если известно, что время между сменой кадров t=0.037 сек. Нужно просто умножить v*t, и в итоге получится 0.037 метров. Вычислять думаю с помощью функции получения значения системного счетчика времени. Такой метод позволяет на компах с разной производительностью моделировать течение времени игрвого мира без проблем с задержкой (или ускорением времени). Однако время между кадрами иногда меняется, из-за совпадения перидоа чтения из видеобуфера ЦАП и записи туда нового кадра, что приводит к рывками дерганию ФПС. Для предотвращения такого эффекта считаю необходимым расчитывать среднее значение дельты времени за последние 5 кадров.
Кроме того, умножив дельту времени на коэффициент времени можно увеличить или замедлить ход времени в игровом мире.
__________________

Хорошо смеется тот, кто стреляет первым! (танкистская мудрость)
Последний раз редактировалось [CCCP] Monster; 11.12.2007 в 00:56.
|