70

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

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

  • C 标准库使用弧度。
  • 几乎所有其他图书馆也使用弧度。
  • 弧度在某些计算中更方便,例如圆弧的长度。

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

(我知道它没有实际意义,而且无论如何也不会改变。我只是好奇,我在 OpenGL.org 上找不到答案。)

4

5 回答 5

31

因为普通人更习惯于计算度数——OpenGL 是为了简单地使用。请注意,所有对度数进行操作的函数都是“高级”函数。

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

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

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

逐点:

  • 优雅——矩阵在各个方面都更加优雅
  • C 库 - C 库由于计算原因使用它们,获取角度的 GL 函数并不意味着用于计算繁重的任务(直接使用矩阵),并且可能无论如何实现都有一个角度查找表。
  • 任何其他库 - 出于与 Clib 相同的原因,跟随 C 库 - 而且,这是不正确的 - 许多 C++ 库允许选择,有些使用后者
  • 计算方便 - 没关系 - 内部表示是矩阵,如果要高效,计算可能使用查找表完成 - 没有对角度的直接操作,所以表示无关紧要

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

最后注意事项:

于 2010-01-27T12:54:59.210 回答
13

我想说,由于 OpenGL 的设计考虑到了最终用户,所以使用度数是因为人们只能用整数指定重要的角度 ( 90, 180, 270...),因此不需要浮点GL_PI常量。

于 2010-01-27T13:01:27.660 回答
6

我认为这是因为您应该能够获得某些角度(例如 90 度或 180 度)的精确旋转矩阵。就像这里的其他人指定的那样,如果您使用 pi/2 而不是 90 度,则舍入误差可能会导致转换矩阵几乎执行 90 度的旋转。

于 2011-02-24T00:27:05.887 回答
4

代码更容易阅读,它简化了新手的学习曲线并允许快速破解。

如前所述 - 度数有优势 - 人类更习惯于度数,比较:0.78539816339744830961566084581988... 到 45 度,例如:/。

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

于 2010-01-27T13:09:22.937 回答
1

好吧,在大多数情况下发生的情况是您使用数学库将弧度转换为度数,然后再转换回弧度。我同意以前很棒的海报所说的大部分内容。

它更具人类可读性。

于 2010-01-27T13:11:29.190 回答