web-dev-qa-db-fra.com

Pourquoi OpenGL utilise-t-il des degrés au lieu de radians?

Les concepteurs OpenGL n'ont jamais eu peur des mathématiques et la connaissance de l'algèbre linéaire est essentielle pour toutes les applications OpenGL les plus simples. Je pense que cela peut être supposé en toute sécurité que les programmeurs OpenGL connaissent des angles dans les radians.

Mathématiquement, les radians sont plus élégants que de degrés à tous égards. Ils ont également des avantages pratiques:

  • La bibliothèque standard C utilise des radians.
  • À peu près toute autre bibliothèque, utilise également des radians.
  • Les radians sont plus pratiques dans certains calculs, par ex. la longueur d'un arc circulaire.

Pourquoi, alors les concepteurs OpenGL ont-ils décidé de spécifier des fonctions telles que glRotatef et gluPerspective pour utiliser des degrés?

(Je sais que ce n'est aucune importance pratique et ça ne changera de toute façon pas. Je suis juste curieux, et je ne pouvais pas trouver la réponse sur OpenGL.org.)

69
Thomas

Parce que les personnes normales sont plus utilisées pour calculer degrés - OpenGL est destinée à être utilisée simple. Notez que toutes les fonctions qui fonctionnent sur les degrés sont des fonctions "de haut niveau".

Pour OpenGL elle-même, ce n'est pas une différence si elle reçoit des radians ou de degrés - ils sont convertis en interne à des matrices de transformation de toute façon, il n'y a donc pas de gain informatique d'utiliser l'une ou l'autre.

Alors, pourquoi compliquer les choses pour les personnes si vous pouvez leur permettre d'utiliser des degrés? Toute personne codant sérieusement à OpenGL fournira à ses propres matrices calculées de Quaternions de toute façon.

Dans le même esprit que nous pourrions demander, pourquoi avoir glRotatef et gluPerspective de toute façon, car les matrices sont plus élégantes à tous égards et permettent une qualité de contrôle plus élevée.

Point par point:

  • Élégancy - Les matrices sont plus élégantes dans tous les aspects
  • C bibliothèque - la bibliothèque C utilise en raison de raisons de calcul, GL Les angles ne sont pas destinées à être utilisées pour des tâches lourds de calcul (utilisez des matrices directement) et la mise en œuvre a probablement une table de recherche pour de toute façon.
  • toute autre bibliothèque - suivante de la bibliothèque C pour les mêmes raisons que CLIB - Aussi, c'est faux - de nombreuses bibliothèques C++ permettent d'utiliser ce dernier
  • Conformation à la condamnité - Peu importe - la représentation interne est des matrices, les calculs probablement effectués à l'aide de tables de recherche si elles sont censées être efficaces - il n'y a pas de fonctionnement direct sur des angles. La représentation n'a donc pas d'importance

Note également : Toutes les fonctions utilisant des degrés sont dans la norme actuelle (3.2) obsolète. glRotatef est la fonction seulement Fonction prenant des degrés, ou en fait, un angle du tout. GL est une bibliothèque de services publics non destinée à un déploiement robuste, il est donc adapté à la lisibilité, et gluPerspective(... 60.0f..) est beaucoup plus lisible et "standard" en termes de fourniture de FOV que gluPerspective( ... M_PI / 3.0f ... ) serait.

Notes finales:

33
Kornel Kisielewicz

Je dirais que depuis que OpenGL a été conçu avec l'utilisateur final à l'esprit, des diplômes ont été utilisés car on peut spécifier des angles importants (90, 180, 270 ...) avec des entiers seulement, et il n'y a donc pas besoin d'un point flottant GL_PI constant.

13
abenthy

Je pense que c'est parce que vous devriez pouvoir obtenir une matrice de rotation exacte à certains angles comme 90 ou 180 degrés. Comme les autres personnes ici ont spécifié, si vous utilisez PI/2 au lieu de 90 degrés, des erreurs d'arrondies peuvent conduire à une matrice de transformation qui presque effectue une rotation de 90 degrés.

5
Kristofer

Le code est plus facile à lire, il facilite la courbe d'apprentissage des débutants et permet un piratage rapide.

Comme indiqué déjà - degrés ont un avantage - les humains sont mieux utilisés pour desgrés, comparer: 0.78539816339744830961566084581988 ... à 45 degrés par exemple: /.

Pour les utilisations avancées de OpenGL, vous fournissez de toute façon vos propres matrices.

3
MaR

Eh bien, ce qui se passe dans la plupart des cas, c'est que vous utilisez une bibliothèque de mathématiques pour convertir des radians en degrés et en arrière aux radians. Je suis d'accord avec la plupart de ce qui a été dit par les précédentes affiches géniales.

C'est plus humain lisible.

1
Pieter Germishuys