我很新于游戏开发,成功建模了一个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。但在它们之间的任何角度会导致相机向前斜步/向后斜步或向前/向后移动。总之,这一直困扰着我,所以我试图在纸上找到解决方案-这行得通:
inline float degreesToStrafe(const float degrees)
{
const float PIOver90 = 3.14159f / 90.0f;
return degrees * PIOver90;
}
然而,在游戏中,这与交换x
和z
的结果完全相同。
非常感谢您的帮助;我很难在网络上找到有关此事的任何信息,但可能是我的搜索方式不正确!