2016-02-24 150 views
0

在我製作的遊戲中,槍具有傳播(浮動),我希望給每個子彈的角度範圍內的隨機值[-spread,spread]。爲此,我想我可以使用glm::rotate,但問題是子彈幾乎散佈在每個方向。用glm旋轉2D矢量

我使用的代碼是:

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

+0

從http://glm.g-truc.net/0.9.5/updates.html'最後,這裏是所有可能在GLM 0.9.5.4使用度的功能列表,需要GLM 0.9.6中的弧度:rotate(矩陣和四元數),[etc.] – vaxquis

+1

_randRotate(randomEngine))_部分返回度數,glm :: rotate需要弧度。這就是解決方案!謝謝! :) – Gykonik

回答

1

如果GLM使用弧度或角度計算旋轉我不記得,但2 Radians近是整圓的三分之一,這意味着子彈的方向會變化多達整個圓的三分之二。您可能希望使用較小的數字進行測試,或者驗證GLM確實使用度來計算旋轉。

編輯:在最新版本的GLM中,我查看了源代碼。有一個註釋版本的Rotate明確地將Degrees轉換爲Radians,但可訪問的源代碼沒有這樣的顯式轉換。所以我只能假設它是期待Radians而不是Degrees作爲你的旋轉輸入。

GLM Source Code

+0

我看了起來,GLM確實使用度來計算旋轉 – Gykonik

+0

@Gykonik AFAIR,http://stackoverflow.com/questions/23945139/glm-function-taking-degrees-as-a-parameter-is-deprecated-何時使用弧度 - GLM可以實際使用兩者。您是否將手動轉換的角度轉換爲角度轉換度數轉換爲弧度? – vaxquis

+0

哦,你說得對。但它必須是學位,對吧?我怎樣才能做到這一點?我讀過,你可以使用 'glm :: degrees()//從弧度到度數。 ' 將弧度轉換爲度數。我應該通過行 ' glm :: rotate(direction,randRotate(randomEngine))''? – Gykonik