Плавающая камера

Статус
Закрыто для дальнейших ответов.

heaven

Пользователь
Пользователь
11 Фев 2005
538
0
0
31
Кантима
ut2c.planetunreal.gamespy.com
суть:
при нахождении курсора в верхнем краю экрана камера идёт вперёд (позицияZ=позицияZ+1), при нахождении курсора в нижнем краю экрана камера идёт назад (позицияZ=позицияZ-1),
по аналогии передвижение камеры работает с левым и правым краем экрана (позицияX=позицияX+-1).

проблема:
после вращения камеры вокруг своей оси перемещение камеры остаётся прежним: тоесть если камера развернулась на 90', то при нажатии вперед камера идёт влево, нажатии влево камера идёт вниз, и т.д.

вот вопрос, каким образом можно заставить при изменении вектора направления камеры корректно перемещать её по осям?
 

iGeL

Пользователь
Пользователь
9 Фев 2005
349
0
0
35
Южный Централ
для дискретного пространства (то есть смещение на 1 и угол поворота кратен 90 градусов) можно сделать так. Нам нужно знать конкретные координаты камеры и ее вектор относительно системы координат, который кодируется также 2 числами.
Если представить себе координатную систему с центром в левом верхнем углу, то получим формулы
Влево X новая = X текущая + X векторная координаты
Враво X новая = X текущая - X векторная координаты
Вперед Y новая = Y текущая + Y векторная координаты
Назад Y новая = Y текущая - Y векторная координаты
вектор вперед (0;1)
вектор назад (0;-1)
влево (1;0)
вправо (-1;0)

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

heaven

Пользователь
Пользователь
11 Фев 2005
538
0
0
31
Кантима
ut2c.planetunreal.gamespy.com
iGeL сказал(а):
Для случая с псевдореалным пространством (поворот на любой угол и дробное смещение, правда все равно будет округляться) естественно придется использовать тригонометрические функции, точные формулы пока не знаю, но думаю это не сложно.
как раз и надо заставить повёрнутую камеру перемещаться относительно вектора её направления.

вот скомпилированный пример того, как у меня ведёт себя камера.
 
Статус
Закрыто для дальнейших ответов.