web-dev-qa-db-ja.com

OpenGLがラジアンの代わりに度を使用するのはなぜですか?

OpenGLの設計者は数学を恐れたことはありません。線形代数の知識は、最も単純なOpenGLアプリケーション以外のすべてに不可欠です。 OpenGLプログラマーがラジアンの角度に慣れていることは間違いないと思います。

数学的には、ラジアンはあらゆる点で度よりもエレガントです。また、実用的な利点もあります。

  • C標準ライブラリはラジアンを使用します。
  • 他のほとんどのライブラリもラジアンを使用しています。
  • ラジアンは、一部の計算でより便利です。円弧の長さ。

では、なぜOpenGLの設計者はglRotatefgluPerspectiveなどの関数を指定して度数を使用することにしたのでしょうか。

(私はそれが実用的に重要ではないことを知っています、そしてそれはとにかく変わるつもりはありません。私は興味があるだけで、OpenGL.orgで答えを見つけることができませんでした。)

69
Thomas

普通の人は度を計算することに慣れているので-OpenGLは単純に使用されることを意図しています。度で動作するすべての関数は「高レベル」関数であることに注意してください。

OpenGL自体については、ラジアンと度のどちらを受け取っても違いはありません。これらはいずれにしても内部的に変換行列に変換されるため、どちらか一方を使用しても計算上の利点はありません。

では、学位の使用を許可できるのであれば、なぜ人々にとって複雑なことをするのでしょうか? OpenGLで真剣にコーディングしている人なら誰でも、とにかく四元数から計算された独自の行列を提供します。

質問と同じ精神で、なぜglRotatefgluPerspectiveをとにかく持っているのですか。マトリックスはあらゆる点でよりエレガントで、より高度な制御が可能です。

ポイントごと:

  • 優雅さ-マトリックスはあらゆる面でよりエレガントです
  • Cライブラリ-計算上の理由により、Cライブラリはそれらを使用します。GL関数は、重い計算タスクに使用するためのものではありません(行列を直接使用します)。おそらく、実装にはルックアップテーブルがあります。とにかく度。
  • その他のライブラリ-Clibと同じ理由でCライブラリに続く-また、それは真実ではない-多くのC++ライブラリは選択を許可し、一部は後者を使用する
  • 計算の信憑性-関係ありません-内部表現は行列です。計算は、効率を上げるためにルックアップテーブルを使用して行われる可能性があります-角度に対する直接操作がないため、表現は関係ありません

また、注意してください:度を使用するすべての関数は、現在の標準(3.2)で非推奨になっています。 glRotatefonly関数であり、度、または実際には角度をとります。 glは、強力なデプロイメント用ではないユーティリティライブラリであるため、可読性に合わせて調整されており、gluPerspective(... 60.0f..)は、gluPerspective( ... M_PI / 3.0f ... )になります。

最終メモ:

33

OpenGLはエンドユーザーを念頭に置いて設計されたため、重要な角度(90180270 ...)を整数で指定できるため、度数が使用されたと思いますだけなので、浮動小数点GL_PI定数は必要ありません。

13
abenthy

90度や180度のような特定の角度で正確な回転行列を取得できるはずだからです。ここで他の人が指定しているように、90度ではなくpi/2を使用すると、丸め誤差によりほぼが90度の回転を実行する変換行列になる可能性があります。

5
Kristofer

コードは読みやすく、初心者の学習曲線を緩和し、迅速なハッキングを可能にします。

すでに述べたように-度HAVEアドバンテージ-人間は度に慣れているので、0.78539816339744830961566084581988 ...を45度と比較してください。

OpenGLの高度な使用のために、とにかく独自の行列を提供します。

3
MaR

まあ、ほとんどの場合に何が起こるかは、数学ライブラリを使用してラジアンから度に変換し、ラジアンに戻すことです。以前の素晴らしいポスターで言われたことのほとんどに同意します。

より人間が読める形式です。

1