Итак, у меня есть объект, который я пытаюсь вращать по схеме Yaw, Pitch and Roll, относительно собственных локальных осей объекта, а не осей глобального пространства.Согласно this , мне нужно выполнить повороты в этом порядке.Я интерпретировал это как следующее:
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 всегда относительно глобального пространства, а вращение вокруг оси z работает от вращения вокруг оси X на 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;
(Они передаютсяфункция, внутренняя для перемещаемой вещи, но с ними ничего не делается).
Мысли?Есть ли что-то еще, что я должен позвонить, чтобы убедиться, что все оси, которые вращаются вокруг, являются локальными осями?