【问题标题】:Radian or Degrees?弧度还是度数?
【发布时间】:2014-02-27 20:50:04
【问题描述】:

当我从欧拉角创建旋转矩阵时,我应该将度数(欧拉角)转换为弧度,然后计算 OpenGL 的旋转矩阵吗? 但是我应该如何处理四元数? 我应该这样做:

void setQuaternionsFromEuler(float bank, float heading, float attitude)
{
   float DegreeToRadian = 3.14f/180.0f;
   double c1 = cos(heading/2*DegreeToRadian);
   double c2 = cos(attitude/2*DegreeToRadian);
   //...
   double s3 = sin(bank/2*DegreeToRadian);

   this.w = c1*c2*c3 - s1*s2*s3;
   //...
}

还有,

void setMatrixFromEuler(float x, float y, float z)
{
   float DegreeToRadian = 3.14f/180.0f;
   x *= DegreeToRadian;
   y *= DegreeToRadian;

   //...
}

还是不行?

【问题讨论】:

  • 请为 π (M_PI) 使用更准确的值,否则通常会导致对象恢复到其原始位置的连续旋转不会这样做!
  • 既然可以有双打,为什么还要使用浮点数? 16位有效数字不是比7位好吗?
  • @duffymo opengl 并不总是接受双打,浮点数是有保证的

标签: c++ opengl math


【解决方案1】:

这取决于您如何定义输入。

C++的三角函数只取弧度,所以你最终需要转换为弧度,但这可能在数据进入你的程序之前完成(这样资源中的角度值都是弧度)

【讨论】:

    【解决方案2】:

    旋转矩阵不再有角度,因此它与 OpenGL 并没有真正的关系,但是您在 C 或 C++ 标准库中使用的三角函数是在弧度上定义的,所以如果您面向用户的 API 使用度数,那么是的,您应该转换为取 cos/sin。

    【讨论】:

      猜你喜欢
      • 2015-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2015-05-04
      相关资源
      最近更新 更多