Я использую lib glm (http://glm.g-truc.net/) для тестового кватерниона, но у меня проблема; когда я преобразую угол Эйлера в кватернион, а затем сразу же кватернион к углам эйлера, мой результат полностью отличается от моих начальных углов Эйлера. Это нормально? Может быть, потому, что вращения не являются общими?
Проверка кода:
#include <glm\quaternion.hpp>
#include <math.h>
#define PI M_PI
#define RADTODEG(x) ( (x) * 180.0 / PI )
#define DEGTORAD(x) ( (x) * PI / 180.0 )
int main( void )
{
float RotX = 90.f;
float RotY = 180.f;
float RotZ = -270.f;
if ( RotX || RotY || RotZ )
{
std::cout << "Init: x= " << RotX << ", y= " << RotY << ", z= " << RotZ << "\n";
glm::quat key_quat(glm::detail::tvec3<float>(DEGTORAD( RotX ),
DEGTORAD( RotY ),
DEGTORAD( RotZ )));
glm::detail::tvec3<float> v = glm::eulerAngles(key_quat);
/* // the result is even worse with this code here
RotX = RADTODEG(v.x);
RotY = RADTODEG(v.y);
RotZ = RADTODEG(v.z);
*/
RotX = v.x;
RotY = v.y;
RotZ = v.z;
std::cout << "Final: x= " << RotX << ", y= " << RotY << ", z= " << RotZ << "\n";
}
return (0);
}
Результат:
Init: x= 90, y= 180, z= -270
Final: x= -90, y= -3.41509e-006, z= -90
спасибо заранее o/