用glm本身旋转2D矢量

时间:2016-02-24 15:06:28

标签: c++ vector rotation glm-math

在我制作的游戏中,枪支有一个点差(浮动),我想给每个子弹的角度一个随机值[-spread,spread]。为此,我想我可以使用glm::rotate,但问题在于子弹几乎向所有方向传播。

我使用的代码是:

void Gun::fire(const glm::vec2& direction, const glm::vec2& position, std::vector<Bullet>& bullets) {
    static std::mt19937 randomEngine(time(nullptr));
    // For offsetting the accuracy
    std::uniform_real_distribution<float> randRotate(-_spread, _spread);


    for (int i = 0; i < _bulletsPerShot; i++) {
        // Add a new bullet
        bullets.emplace_back(position, 
                             glm::rotate(direction, randRotate(randomEngine)),
                             _bulletDamage, 
                             _bulletSpeed);
    }   
}

(顶部我包括vectorglm/gtx/rotate_vector.hpp

1 个答案:

答案 0 :(得分:1)

我不记得GLM是否使用Radians或Degrees来计算旋转,但2 Radians几乎是整圆的三分之一,这意味着子弹的方向会变化多达整数的三分之二圈。您可能希望使用较小的数字进行测试,或者验证GLM确实使用Degrees来计算旋转。

编辑:在GLM的最新版本中,我查看了源代码。有一个注释掉版本的Rotate,它明确地将Degrees转换为Radians,但是可访问的源代码没有这样的显式转换。所以我只能假设它是期望Radians而不是Degrees,作为Rotation的输入。

GLM Source Code