2016-02-17 91 views
0

我有這個腳本來獲取實體的MVP,全部以glm爲單位。我希望物體根據它用於運動的方向值進行旋轉,但在視覺上,物體的旋轉速度要慢上百倍。這必須是準確的,以便在視覺上正確地表示方向。但我不是專家,仍然只是學習,並試圖讓我的頭腦,所以再次,希望聰明的人可以幫助我? :)如何在OpenGL中使用GLM正確計算旋轉

void Entity::turnRight() 
{ 
    m_Orientation += m_TurnSpeed; 
} 

轉彎速度是0.02默認

然後拿到MVP:

m_Direction[0] = cos(0.0f) * sin(m_Orientation); 
    m_Direction[1] = sin(0.0f); 
    m_Direction[2] = cos(0.0f) * cos(m_Orientation); 

    glm::mat4 projectionMatrix = glm::perspective(90.0f, (GLfloat)640/(GLfloat)480, 0.001f, 60.0f); 
    glm::mat4 translationMatrix = glm::translate(glm::mat4(), glm::vec3(m_Position[0], m_Position[1], m_Position[2])); 
    glm::mat4 Rotation = glm::rotate(glm::mat4(), (m_Orientation/m_TurnSpeed), glm::vec3(0, 1, 0)); 
    m_MVP = (projectionMatrix * viewMatrix * glm::mat4() * translationMatrix * Rotation);  

這一切就是真的......玩家旋轉和平移正常,但在視覺上,它是關閉的,就像它轉向的方式小於實際的方向值(m_Orientation)

我在那裏不計算什麼?

在此先感謝!

+0

如果您每秒調用60次turnRight(),我預計完成一個整圈需要5秒鐘的時間。那是你得到的嗎? –

+0

不,實際中的玩家在網格本身做了整整一圈的時候,在一個地方轉了一百萬次,大約需要一分鐘左右的時間,所以我認爲我錯過了一次計算 – GDN9

+0

您打了多少次電話在網格完成一個圓之前使用'turnRight()'? –

回答

0

我認爲你使用的是GLM的舊版本,它使用度數而不是弧度。這是GLM老版本中的一個不幸的設計缺陷。

你或許可以使用預處理宏解決的事情:

#define GLM_FORCE_RADIANS 
#include <glm/...> 
#include <glm/...> 

但是,它可能是更好的升級到最新版本GLM的。版本0.9.6和更新版本默認使用弧度。

+0

非常感謝! :)完美。感覺就像現在的老生化危機:P – GDN9