作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在使用 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/
最佳答案
是的,这很正常。 There are 2 ways用欧拉角表示相同的旋转。
我个人不喜欢欧拉角,they mess up the stability of your app.我会避开他们。另外,他们是not very handy要么。
关于c++ - 欧拉角到四元数然后四元数到欧拉角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103683/
我有一个第一人称相机 Controller 实现如下: float rotSpeed = 20.0f; xRotation += deltaPos.y * rotSpeed * Time.deltaT
我正在编写一个程序,它加载一个包含场景描述的文件,然后使用 OpenGL 显示它。我将 GLM 用于我的所有数学运算。场景文件中的旋转以四元数格式存储。我的场景管理系统以欧拉角的形式对对象进行旋转,这
我想要实现的效果是从相机的 pointOfView 位置指向一个箭头,在 x 和 z 轴上与场景(和重力)对齐,但指向与相机相同的方向。它可能看起来像这样: 现在,我将其欧拉角 x 和 z 设置为 0
我是一名优秀的程序员,十分优秀!