Я довольно новичок в разработке игр и успешно смоделировал трехмерный ландшафт и имею камеру, способную свободно перемещаться в игровом мире, однако я столкнулся с проблемой что я не могу понять.Обращение с траффиком/боковым шагом в 3D-игре
В настоящее время, чтобы двигаться вперед/назад у меня есть методы следующим образом:
void Player::moveForward(const float speed)
{
Vector3 pos = getPosition();
float cosYaw = cosf(degreesToRadians(m_yaw));
float sinYaw = sinf(degreesToRadians(m_yaw));
pos.x += float(cosYaw)*speed;
pos.z += float(sinYaw)*speed;
setPosition(pos);
}
Где Vector3 простой X, Y, Z-структура и степени в радианы:
inline float degreesToRadians(const float degrees) {
const float PIOver180 = 3.14159f/180.0f;
return degrees * PIOver180;
}
К обрабатывая движение вперед, я просто помещаю положительный поплавок в аргумент и перемещаю назад отрицательный поплавок.
Это позволяет мне, конечно, двигаться вперед и назад - я также могу перемещаться вверх, изменяя положение pos.y
позиции, однако я не могу понять, как двигаться влево/вправо.
листать x
и z
результаты у меня в состоянии шаг в сторону при условии, рыскания 360/0, 270, 180 или 90, однако в любом месте между ними углов приводит камеру вперед-SideStep/назад-SideStep или двигаться вперед/в обратном направлении.
Во всяком случае, это было беспокоит меня, так что я пытался найти решение на бумаге - это сработало:
inline float degreesToStrafe(const float degrees)
{
const float PIOver90 = 3.14159f/90.0f;
return degrees * PIOver90;
}
Однако, в игре это точно так же, как и поменять местами x
и z
результаты.
Любая помощь будет принята с благодарностью; Я изо всех сил пытался найти что-нибудь в Интернете относительно этого, но, возможно, я просто искал неправильно!
Большое вам спасибо! – krslynx
Отлично. Спасибо =] – Hobbes