私は、グローバル空間の軸ではなく、オブジェクト自身のローカル軸を基準にして、Yaw、Pitch and Rollスキームに従って回転しようとしているオブジェクトを持っています。 thisによれば、私はこの順番で回転を行う必要があります。これを意味すると解釈しました。OpenGL Rotation - Local vs Global Axes
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ですが、それ以外の場合は上がります。
逆の順序も試みましたが、どちらも問題ありません。私は他のすべての命令も試したと思うので、問題は他のものでなければならない。そうかもしれない? 、
//Rotation
m_Rotation.x += Angle.x;
m_Rotation.y += Angle.y;
m_Rotation.z += Angle.z;
(彼らは周りに移動される事に内部関数に渡されます。
///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に追加されます。
は、これは私が回転を入手する方法ですそれ以外は何もしません)。
思考?すべての軸が回転しているかどうかを確認するために何か必要なものがありますか?
おそらく回転行列を使用するほうがよいでしょう。 – Lalaland
P-> R-> Yを試しましたか?あなたが回転したら、新しい回転が適用される軸は*新しい*軸ですが、元の軸はある角度だけ回転していることを考慮しましたか? – Saphrosit
はい、私はP-R-Yを試しましたが、それはどちらも役に立ちません - ロールはグローバル軸に固執します。私は変換行列の使用経験がありません - これらの混乱を避けるのでしょうか?私はまだ3つのglRotatef()コールを持っていなければならないでしょうか? – GarrickW