旋转物体使其面向移动方向

问题描述 投票:0回答:1

我正在开发一个简单的游戏,其中我在天空中有一架飞机,我给它一个围绕某个半径的圆的圆形路径。飞机生成时面朝正 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 度,而不是处于固定的焦点方向。

c++ rotation game-development
1个回答
0
投票

您可以根据飞机当前位置与圆心的差值计算方向向量,从而计算飞机绕圆形路径移动时的前进方向。

假设圆心位于原点(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));
© www.soinside.com 2019 - 2024. All rights reserved.