2010-01-27 53 views
67

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

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

  • C标准库使用弧度。
  • 几乎任何其他库都使用弧度。
  • 在一些计算中,辐射者更方便,例如,圆弧的长度。

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

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

+0

虽然我从来没有使用过非常多的OpenGL - 我也想知道为什么度数而不是弧度!正如你所说,显而易见,弧度在每个方面都更加优雅。 – sabiland 2010-01-27 12:54:58

+4

对于投票结束的人来说:这是一个真正的问题,并且在那里必须有一个确定的和决定性的答案。也许在SGI的一些会议上有几分钟的时间,我不知道...... – Thomas 2010-01-27 13:03:58

回答

33

因为正常的人比较多用于计算度数 - OpenGL旨在用于简单。请注意,所有对度进行操作的函数都是“高级”函数。

对于OpenGL本身,它是否接收弧度或度数没有区别 - 它们在内部转换为转换矩阵,所以没有使用其中一个或另一个的计算收益。

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

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

逐点:

  • 雍容华贵 - 矩阵是在各方面
  • C库更优雅 - C库使用他们,因为计算的原因,拍摄角度GL功能都注定不会被用于计算繁重的任务(直接使用矩阵),并且可能实现有一个度数查找表。
  • 任何其他库 - 出于与Clib相同的原因在C库之后 - 也是不真实的 - 许多C++库允许进行选择,有些则使用后者。计算的便利性 - 无所谓 - 内部表示法是矩阵,如果意味着要高效计算probablye使用查找表完成的 - 有对角没有直接的操作,所以表示没关系

还要注意:所有的使用度的功能在目前的标准(3.2)已弃用。 glRotatef只有功能取得程度,或者事实上,一个角度。glu是一种不适合重型部署的实用程序库,因此它专为可读性量身定制,并且gluPerspective(... 60.0f..)在提供FOV方面的可读性和“标准”要比gluPerspective(... M_PI/3.0f ...)多得多。

最后说明:

+13

你打电话给OpenGL程序员“正常人”吗?使用* degrees *会让东西变得复杂,就像我所说的 - 你必须在每个角落将它们转换为弧度('atan2'输出,仅举一个例子)。 – Thomas 2010-01-27 13:00:45

+6

可能是OGL开发人员的另一个'程度',我们永远不会知道 – 2010-01-27 13:03:44

+1

@Thomas:如果你使用atan2输出,不会使用四元数和自己构造旋转矩阵是可耻的;) – 2010-01-27 13:04:28

13

我想说的是,由于OpenGL的设计与最终用户记住,使用度,因为一个可以指定重要的角度(90180270 ...)与仅整数,所以不需要浮点数GL_PI不变。

+4

+1:也非常好点:) – 2010-01-27 13:02:32

+1

对!例如,如果您正在制作2-d栅格样式的图形,并且想要将屏幕的方向改变90度,则实现可能需要确保没有浮点错误的干净的转换矩阵... 90度的表示在浮点上是明确的。 – 2010-02-26 03:41:30

+2

-1。我很确定他们在内部转换为弧度以用于任何三角测量:)。 – Kos 2010-11-11 21:14:46

3

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

正如已经指出的那样 - 度有很多优点 - 人类更适合度,比较:0.78539816339744830961566084581988 ...以45度为例:/。

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

+0

“人类更适应学位”我不同意 – user3728501 2013-07-20 13:12:40

+3

人类更习惯于学位。人们谈论转90度或“做180”,或者360度,720度,900度或1080度旋转。 XBox 360,1080单板滑雪,PhotoShop操作是以90度递增旋转等。没有人说“他做了PI”,或者旋转那张图片PI/2弧度或1.57弧度,因为弧度是分数/无理数,而度数通常是代表一些圈子的整数。大多数FOV操作和旋转以度为单位完成,每个象限以90度为增量进行思考。 – Triynko 2014-01-06 19:25:13

+2

45度是PI/4弧度,而不是0.78539816339744830961566084581988。 – robinjam 2014-03-25 17:57:41

1

那么,在大多数情况下会发生什么情况是,您使用数学库将弧度转换为度数并转换回弧度。我同意以前令人敬畏的海报所说的大部分内容。

它更具人性化可读性。

5

我认为这是因为你应该能够得到一个确切的旋转矩阵,如90或180度的某些角度。像其他人在这里指定的那样,如果使用pi/2而不是90度,舍入误差可能会导致差不多执行90度旋转的变换矩阵。