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

为什么OpenGL使用度而不是弧度?,opengl,angle,degrees,radians,Opengl,Angle,Degrees,Radians,OpenGL的设计者从不害怕数学,除了最简单的OpenGL应用程序外,线性代数的知识对所有应用程序都是必不可少的。我认为可以安全地假设OpenGL程序员熟悉以弧度表示的角度 从数学上讲,弧度在各个方面都比度优雅。它们还具有实际优势: C标准库使用弧度 几乎所有其他库都使用弧度 弧度在某些计算中更为方便,例如圆弧的长度 那么,为什么OpenGL设计者决定指定像glRotatef和glupperspective这样的函数来使用度呢 (我知道这没有实际意义,而且它无论如何也不会改变。我只是好奇,我

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

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

  • C标准库使用弧度
  • 几乎所有其他库都使用弧度
  • 弧度在某些计算中更为方便,例如圆弧的长度
那么,为什么OpenGL设计者决定指定像
glRotatef
glupperspective
这样的函数来使用度呢


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

因为普通人更习惯于计算学位——OpenGL应该简单使用。请注意,在度数上操作的所有功能都是“高级”功能

对于OpenGL本身来说,它接收弧度或度数没有什么区别——反正它们在内部被转换为变换矩阵,所以使用其中一个或另一个都没有计算增益

那么,如果你允许人们使用学位,为什么要让事情复杂化呢?任何在OpenGL中认真编程的人都会提供他们自己的矩阵,这些矩阵是由四元数计算出来的

本着同样的精神,我们可以问,既然矩阵在各个方面都更优雅,允许更高级别的控制,那么为什么要有
glRotatef
glupperspective

逐点:

  • 优雅-矩阵在各个方面都更加优雅
  • C库-C库使用它们是因为计算的原因,具有角度的GL函数并不用于计算繁重的任务(直接使用矩阵),而且可能实现中有一个度的查找表
  • 任何其他库——与CLB相同的原因,遵循C库——也不正确——许多C++库允许选择,有些使用后者
  • 计算便利性-不重要-内部表示是矩阵,如果为了高效,可能使用查找表进行计算-没有对角度的直接操作,因此表示不重要
另请注意:所有使用度的函数在当前标准(3.2)中都已弃用
glRotatef
唯一的函数,表示度,或者实际上,表示角度glu是一个不适用于重型部署的实用程序库,因此它是针对可读性而定制的,
glu透视(…60.0f.)
在提供FOV方面比
glu透视(…M_PI/3.0f…)
更具可读性和“标准”


最后一点提示:

我想说,由于OpenGL是为最终用户而设计的,所以使用度是因为可以用整数指定重要的角度(
90
180
270
),因此不需要浮点
GL\u PI
常量

代码更容易阅读,它简化了新手的学习过程,并允许快速黑客攻击

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


对于OpenGL的高级使用,您可以提供自己的矩阵。

大多数情况下,您使用数学库将弧度转换为度,然后再转换为弧度。我同意之前那些很棒的海报上说的大部分话


它更容易让人阅读。

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

虽然我从未使用过OpenGL,但我也想知道,为什么用度而不是弧度!?很明显,正如你所说,弧度在各个方面都更加优雅。对于投票结束的人来说:这是一个真正的问题,必须有一个明确和结论性的答案。也许是SGI会议上的一些旧的会议记录,我不知道……你把OpenGL程序员称为“普通人”吗?使用度会使事情复杂化,就像我所说的——你必须在每个角落将它们转换为弧度(
atan2
output,仅举一个例子)。这可能是OGL开发人员的另一种“度”思维,我们永远不会这么想know@Thomas:如果使用atan2输出,不使用四元数并自己构造旋转矩阵是可耻的;)我同意
glRotatef
不适用于繁重的数学任务
glRotatef
更多的是用来测试东西或供初学者使用。在OpenGL 3.0时代,glRotatef无论如何都是被弃用的。@Kornel Kisilewicz(这完全是离题的-对不起..),但是..哦,人刚刚41天,在SO和6359的声誉。。。好家伙。。看起来除了这样什么都不做……)正确的!例如,如果您正在制作二维光栅样式的图形,并且希望将屏幕方向更改90度,则实现可能希望确保干净的变换矩阵没有浮点错误…浮点中的90度表示是明确的。-1。我敢肯定,它们在内部被转换成弧度以用于任何三角函数:)。用户仍然可以轻松指定重要的角度,而无需使用GL_PI。这就是我回答的重点,请注意,界面和实现是库的不同方面。几乎可以肯定,它们被转换为弧度,但您的-1对前面的评论投了反对票,而不是答案,对吗?人类更习惯于度。