为什么OpenGL使用度而不是弧度?

Tho*_*mas 68 opengl angle degrees radians

OpenGL设计师从不害怕数学,线性代数的知识对于除最简单的OpenGL应用之外的所有人都是必不可少的.我认为可以安全地假设OpenGL程序员熟悉弧度角度.

在数学上,弧度在各个方面都比度数更优雅.它们还具有实际优势:

  • C标准库使用弧度.
  • 几乎任何其他图书馆都使用弧度.
  • 在一些计算中,弧度更方便,例如圆弧的长度.

那么,为什么OpenGL设计者决定指定像glRotatefgluPerspective使用度数这样的函数呢?

(我知道它没有实际意义,反正也不会改变.我只是好奇,我在OpenGL.org上找不到答案.)

Kor*_*icz 33

因为普通人更习惯于计算学位 - OpenGL意味着使用简单.请注意,所有以度为单位运算的函数都是"高级"函数.

对于OpenGL本身而言,它是否接收弧度或度数没有区别 - 无论如何它们都在内部转换为转换矩阵,因此使用其中一个没有计算收益.

那么,如果你可以允许他们使用学位,为什么要为人们复杂化呢?任何在OpenGL中认真编码的人都会提供从四元数计算出的自己的矩阵.

本着同样的精神,我们可以问,为什么有glRotatef,gluPerspective无论如何,因为矩阵在各个方面都更优雅,并允许更高级别的控制.

逐点:

  • 优雅 - 矩阵在各方面都更优雅
  • C库 - 由于计算原因,C库使用它们,采用角度的GL函数并不意味着用于计算繁重的任务(直接使用矩阵),并且可能实现具有度数的查找表.
  • 任何其他库 - 跟C库一样出于与Clib相同的原因 - 也是,这是不真实的 - 许多C++库允许选择,有些使用后者
  • 计算的可靠性 - 无关紧要 - 内部表示是矩阵,计算可能使用查找表进行,如果意味着有效 - 没有直接操作角度,所以表示无关紧要

另请注意:所有使用度数的函数都在当前标准(3.2)中已弃用.glRotatef是衡量学位的唯一函数,或者事实上,它是一个角度.glu是一个实用程序库,不适用于重型部署,因此它是针对可读性而量身定制的,并且gluPerspective(... 60.0f..)在提供FOV方面比gluPerspective( ... M_PI / 3.0f ... )其更具可读性和"标准" .

最后的说明:

  • 您是否将OpenGL程序员称为"普通人"?使用*度*是为了使事情变得复杂,就像我所说的那样 - 你必须将它们转换为每个角落的弧度(`atan2`输出,仅举一个例子). (13认同)
  • 可能是OGL开发人员的另一个"学位",我们永远不会知道 (6认同)

abe*_*thy 13

我想说的是,由于OpenGL的设计与最终用户心中,度被使用,因为人可以指定重要的角度(90,180,270...)与只能为整数,所以没有必要为一个浮点GL_PI常数.

  • -1.我很确定它们会在内部转换为弧度以用于任何三角函数:). (2认同)

小智 5

我认为这是因为你应该能够获得90或180度等特定角度的精确旋转矩阵.像这里指定的其他人一样,如果使用pi/2而不是90度,舍入误差可能会导致转换矩阵几乎执行90度旋转.