代码之家  ›  专栏  ›  技术社区  ›  Thomas

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

  •  68
  • Thomas  · 技术社区  · 15 年前

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

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

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

    那么,为什么OpenGL设计师决定指定类似 glRotatef gluPerspective 使用学位?

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

    5 回复  |  直到 13 年前
        1
  •  33
  •   Kornel Kisielewicz    15 年前

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

    对于OpenGL本身,无论它接收的是弧度还是度数,都没有区别——反正它们都是内部转换为转换矩阵的,所以使用其中一个或另一个都没有计算增益。

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

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

    逐点:

    • 优雅-矩阵在各个方面都更优雅
    • C库-C库使用它们是因为计算原因,采用角度的GL函数不用于计算繁重的任务(直接使用矩阵),而且可能实现有一个用于度数的查找表。
    • 任何其他库——与CLB相同的原因,遵循C库——也不是真的——许多C++库允许选择,有些则使用后者
    • 计算便利性——不重要——内部表示是矩阵,如果要有效的话,可以使用查找表进行计算——对角度没有直接操作,因此表示并不重要。

    也注意 :所有使用度数的函数都在当前标准(3.2)中,已弃用。 格洛塔特夫 只有 函数取度数,或者实际上是一个角度。 谷氨酸 实用程序库不是用于重载部署的,因此它是针对可读性而定制的,并且 gluPerspective(... 60.0f..) 在提供FOV方面比 gluPerspective( ... M_PI / 3.0f ... ) 将是。

    最后注:

        2
  •  13
  •   abenthy    15 年前

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

        3
  •  5
  •   Kristofer    13 年前

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

        4
  •  3
  •   MaR    15 年前

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

    如前所述-学位有优势-人类更好地习惯学位,相比之下:0.78539816339744830961566084581988…到45度,例如:/。

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

        5
  •  1
  •   Pieter Germishuys    15 年前

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

    它更具人类可读性。