所以我有一個對象,我試圖根據Yaw,Pitch and Roll方案旋轉,相對於對象本身的軸而不是全局空間的軸。根據this,我需要按順序執行旋轉。我的解釋是:OpenGL旋轉 - 局部與全局軸
glRotatef(m_Rotation.y, 0.0, 1.0, 0.0);
glRotatef(m_Rotation.z, 0.0, 0.0, 1.0);
glRotatef(m_Rotation.x, 1.0, 0.0, 0.0);
但是,圍繞Y軸和Z軸的旋轉不起作用。圍繞Y軸的旋轉總是相對於全局空間,圍繞X軸旋轉的z軸旋轉角度爲0,否則會混亂。
可以肯定的是,我也嘗試了相反的順序,但那也行不通。我想我也嘗試了其他所有的命令,所以問題一定是別的。它可能是?
這是我獲得的旋轉:
///ROTATIONS
sf::Vector3<float> Rotation;
Rotation.x = 0;
Rotation.y = 0;
Rotation.z = 0;
//ROLL
if (m_pApp->GetInput().IsKeyDown(sf::Key::Up) == true)
{
Rotation.x -= TurnSpeed;
}
if (m_pApp->GetInput().IsKeyDown(sf::Key::Down) == true)
{
Rotation.x += TurnSpeed;
}
//YAW
if (m_pApp->GetInput().IsKeyDown(sf::Key::Left) == true)
{
Rotation.y -= TurnSpeed;
}
if (m_pApp->GetInput().IsKeyDown(sf::Key::Right) == true)
{
Rotation.y += TurnSpeed;
}
//PITCH
if (m_pApp->GetInput().IsKeyDown(sf::Key::Q) == true)
{
Rotation.z -= TurnSpeed;
}
if (m_pApp->GetInput().IsKeyDown(sf::Key::E) == true)
{
Rotation.z += TurnSpeed;
}
然後將它們添加到m_Rotation這樣:
//Rotation
m_Rotation.x += Angle.x;
m_Rotation.y += Angle.y;
m_Rotation.z += Angle.z;
(它們被傳遞到內部的東西的功能被四處移動,但沒有別的事情與他們做)。
的思考?還有什麼我應該調用以確保所有正在旋轉的軸都是局部軸?
無論如何可能更好地使用旋轉矩陣。 – Lalaland 2012-03-14 13:39:51
您是否嘗試過P-> R-> Y作爲順序?你有沒有考慮到,一旦你旋轉,新的旋轉應用的軸是*新的*,我的意思是原始軸旋轉了一定角度? – Saphrosit 2012-03-14 14:02:54
是的,我已經嘗試了P-R-Y,但是這也沒有幫助 - 滾動貼到全局座標軸。我沒有使用變換矩陣的經驗 - 他們會完全避免這種麻煩嗎?我是不是還需要三次glRotatef()調用並將它們以某種順序或另一種順序放置? – GarrickW 2012-03-14 15:25:13