我正在开发一个简单的游戏,其中我在天空中有一架飞机,我给它一个围绕某个半径的圆的圆形路径。飞机生成时面朝正 z,当绕该圆移动时,它只是保持面朝正 z,并且永远不会转向面朝其绕圆运动的方向。
我尝试计算一个新的方向,但这似乎不起作用,我对此很困惑。
对于制作游戏来说相当陌生,如果这是一个简单的问题,我深表歉意。
void Update(float deltaTime, const Matrix& worldMatrix, const Matrix& viewMatrix)
{
float x = radius * cos(angle);
float y = radius * sin(angle);
position = vec3(position.x + x, position.y, position.z + y);
angle += speed * dt;
if(angle > 2 * M_PI)
{
angle -= 2 * M_PI;
}
vec3 direction;
direction.x = std::cos(rad(yaw)) * std::cos(rad(pitch));
direction.y = std::sin(rad(pitch));
direction.z = std::sin(rad(yaw)) * std::cos(rad(pitch));
direction = direction.unit();
modelMatrix = viewMatrix *
Matrix::Translate(position + direction) *
worldMatrix *
Matrix::Scale(vec3(scale, scale, scale));
}
我也尝试过这样做:
auto d = atan2(x, y) * 180 / 3.14;
但这使得物体在绕圆移动的同时不断旋转 360 度,而不是处于固定的焦点方向。
您可以根据飞机当前位置与圆心的差值计算方向向量,从而计算飞机绕圆形路径移动时的前进方向。
假设圆心位于原点(0, 0, 0),则可以这样计算前进方向:
vec3 center(0, 0, 0); // Assuming the center of the circle is at the origin
// Calculate the direction vector from the plane's current position to the center of the circle
vec3 direction = center - position;
direction = direction.unit(); // Normalize the direction vector
// Now, you can use this direction vector to update your model matrix
modelMatrix = viewMatrix *
Matrix::Translate(position + direction) *
worldMatrix *
Matrix::Scale(vec3(scale, scale, scale));