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


69

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

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

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

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

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


尽管我从未使用过OpenGL,但我也很奇怪,为什么还要用度数而不是弧度!显然,弧度在每个方面都比您说的要优雅。
萨比兰德

4
对于投票结束的人:这是一个真正的问题,必须在那里有一个确定的结论性答案。也许从SGI会议的一些会议纪要中,我不知道...
Thomas

Answers:


31

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

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

那么,如果您可以允许他们使用学位,为什么还要使人们变得复杂呢?任何在OpenGL中进行认真编码的人无论如何都会提供根据四元数计算的矩阵。

本着同样的精神,我们会问,为什么要拥有,glRotatef以及为什么要拥有gluPerspective,因为矩阵在各个方面都更加优雅,并允许更高级别的控制。

逐点:

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

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

最后说明:


16
您是否将OpenGL程序员称为“普通人”?就像我所说的那样,使用度数会使事物变得复杂-您必须在每个角处将其转换为弧度(atan2输出,仅举一个例子)。
Thomas

6
可能是OGL开发人员的另一种“程度”,我们永远不会知道
Jey Geethan 2010年

1
@Thomas:如果使用atan2输出,那么不使用四元数和自己构建旋转矩阵将是可耻的;)
Kornel Kisielewicz 2010年

我同意这glRotatef并不适合繁重的数学任务。glRotatef意味着更多地测试东西或供初学者使用。在OpenGL 3.0glRotatef中,无论如何都已弃用。
abenthy

@Kornel Kisielewicz(这完全是题外话-对不起..)but..oh男子在SO和6359的声誉......要命的家伙..只有41天大的样子做别的什么比SO .. :)
ashishsony

13

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


1
对!例如,如果您正在制作二维栅格样式的图形,并且想要将屏幕的方向更改90度,则实现可能要确保干净的变换矩阵没有浮点错误...表示90度在浮点中是明确的。
Ben Supnik

2
-1。我很确定它们会在内部转换为弧度,以用于任何三角函数:)。
科斯,2010年

1
用户仍然可以轻松指定重要角度,而不必使用GL_PI。那就是我回答的重点,请注意,接口和实现是库的不同方面。
abenthy

1
几乎可以肯定,它们已转换为弧度,但是您的-1否决了前面的注释,而不是答案,对吗?
贾斯汀

5

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


4

代码更易于阅读,它为新手减轻了学习难度,并允许快速黑客入侵。

如前所述-度具有优势-人类更习惯于度,例如:0.78539816339744830961566084581988 ...以45度为例:/。

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


4
人类更习惯了程度。人们谈论旋转90度或“旋转180度”,或者说旋转360、720、900或1080。XBox 360、1080 Snowboarding,PhotoShop操作是以90度为增量进行旋转,等等。没人会说“他做了一个PI”,也没有旋转图片PI / 2弧度或1.57弧度,因为弧度是小数/无理数,而度数是通常是整数,代表一个圆的偶数划分。大多数FOV操作和旋转均以度为单位,并且每个象限以90度为增量进行考虑。
Triynko 2014年

3
45度是PI / 4弧度,而不是0.78539816339744830961566084581988。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.