Показать сообщение отдельно
Старый 20.01.2011, 00:46   #31
turBO
ПроЭктировщик
 
Аватар для turBO
 
Регистрация: 02.03.2007
Сообщений: 194
Написано 65 полезных сообщений
(для 168 пользователей)
Ответ: Реализация поезда

Над проблемами движения локомотивов и вагонов по рельсам, следованию вагонов за поездом и пр. бился достаточно долго. Переходил от одной реализации к другой.
Остановился на таком варианте (в 3d-пространстве). Ж\д-полотно - это набор геометрических точек, т.е. цепочек объектов. Отдельные цепочки связаны между собой т.н. узлами или "стрелками".
Локомотив располагается в n-ую точку цепи и начинает движение к следующей точке. Приращение может быть как положительным, так и отрицательным. Движется он к следующей n+1 или n-1 точке в цепи. Но, как верно отметил Pax, у поезда 2 пары тележек, т.е. два центра вращения. Соответственно, мы движем набор из двух тележек с фиксированным расстоянием и определяем координаты x,y,z средней точки между ними (на примере blitz3d).

mid_x#=EntityX(e1)+(EntityX(e2)-EntityX(e1))/2
mid_z#=EntityZ(e1)+(EntityZ(e2)-EntityZ(e1))/2
mid_y#=EntityY(e1)+(EntityY(e2)-EntityY(e1))/2

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

dy#=DeltaYaw(r\ent,tr\ent)
dp#=DeltaPitch (r\ent,tr\ent )

и постепенно уменьшаем вращением модели эту разницу - поезд будет входить в повороты, плавно спускаться с гор и пр.
Итак, последовательность всех колёсных тележек поезда и вагонов - это своего рода змейка. Тут всё просто - движем каждую тележку с одинаковой скоростью и вагоны покатятся следом за локомотивом (каждая из них будет в точности повторять траекторию движения предыдущей).

Это вкратце.
__________________
— Скажи мне, что это не бомба.
— Хорошо. Это котенок. Замечательный взрывной котенок.
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо turBO за это полезное сообщение:
ABTOMAT (20.01.2011), Артем Валерьевич (20.01.2011), CRASHER (30.01.2011), maxturbo (20.01.2011), pax (20.01.2011), Reks888 (21.01.2011)