c++ - 使用 glm 适当旋转 2D vector

标签 c++ vector rotation glm-math

在我制作的游戏中,枪支有一个散布( float ),我想给每颗子弹的角度一个范围 [-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)

最佳答案

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

编辑:在最新版本的 GLM 中,我查看了源代码。有一个已注释掉的 Rotate 版本,可以将度数显式转换为弧度,但可访问的源代码没有此类显式转换。所以我只能假设它期望弧度而不是度数作为旋转的输入。

GLM Source Code

关于c++ - 使用 glm 适当旋转 2D vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35605765/

相关文章:

c++ - 在 OpenCV 中使用 High Profile 从 High Profile mp4 文件编写 H.264 视频

c++ - 谁写到标准输出?

c++ - to_string 函数追加零

jQuery Rotate 在几次使用后滞后

swift - ARKit 无法在垂直平面上正确旋转 SCNNode

c++ - zeroMQ 客户端练习将接口(interface)与实现分离

c++ - std::reference_wrapper/std::unique_ptr 替代存储多态值的 std::vector

c++ - 在 C++ 中使用数组或 std::vectors,性能差距是什么?

c++ - 如何在不使 std::vector 成为公共(public)成员的情况下设计 C++ 类?

c# - 如何以非整数角度旋转二维数组