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

时间:2010-01-27 12:49:04

标签: opengl angle degrees radians

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

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

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

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

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

5 个答案:

答案 0 :(得分:33)

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

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

那么,如果你能让他们使用学位,为什么会让人感到复杂?任何在OpenGL中认真编码的人都会提供从四元数计算出的自己的矩阵。

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

逐点:

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

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

最后的说明:

答案 1 :(得分:13)

我会说,由于OpenGL的设计考虑了最终用户,因此可以使用度数,因为可以指定重要的角度(90180270 ...... )仅使用整数,因此不需要浮点GL_PI常量。

答案 2 :(得分:5)

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

答案 3 :(得分:3)

代码更易于阅读,它简化了新手的学习曲线并允许快速黑客攻击。

如上所述 - 度有优势 - 人类更适合度,比较:0.78539816339744830961566084581988 ...以45度为例:/。

对于OpenGL的高级用途,无论如何都要提供自己的矩阵。

答案 4 :(得分:1)

嗯,在大多数情况下会发生的事情是你使用数学库将弧度转换为度数并返回弧度。我同意以前很棒的海报所说的大部分内容。

它更具人性化。