69 votes

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

Les concepteurs d'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, sauf les plus simples. Je pense que l'on peut supposer sans risque que les programmeurs OpenGL sont familiers avec les angles en radians.

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

  • La bibliothèque standard du C utilise les radians.
  • Presque toutes les autres bibliothèques utilisent également les radians.
  • Les radians sont plus pratiques dans certains calculs, par exemple la longueur d'un arc de cercle.

Pourquoi, alors, les concepteurs d'OpenGL ont-ils décidé de spécifier des fonctions telles que glRotatef y gluPerspective pour utiliser les diplômes ?

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

33voto

Kornel Kisielewicz Points 26556

Parce que les gens normaux sont plus habitués à calculer des degrés -- OpenGL est destiné à être utilisé simplement. Notez que toutes les fonctions qui opèrent sur les degrés sont des fonctions de "haut niveau".

Pour OpenGL lui-même, il n'y a pas de différence entre les radians et les degrés -- ils sont convertis en interne en matrices de transformation de toute façon, donc il n'y a pas de gain de calcul à utiliser l'un ou l'autre.

Alors pourquoi compliquer les choses pour les gens si vous pouvez les autoriser à utiliser des diplômes ? Toute personne codant sérieusement en OpenGL fournira de toute façon ses propres matrices calculées à partir de quaternions.

Dans le même esprit, nous pourrions nous demander, pourquoi avoir glRotatef y gluPerspective de toute façon, puisque les matrices sont plus élégantes à tous égards et permettent un meilleur niveau de contrôle.

Point par point :

  • Élégance - les matrices sont plus élégantes à tous égards.
  • Bibliothèque C - La bibliothèque C les utilise pour des raisons de calcul, les fonctions GL prenant des angles ne sont pas destinées à être utilisées pour des tâches de calcul lourdes (utilisez directement les matrices), et l'implémentation a probablement une table de recherche pour les degrés de toute façon.
  • toute autre bibliothèque - suivant la bibliothèque C pour les mêmes raisons que Clib -- aussi, c'est faux -- beaucoup de bibliothèques C++ permettent un choix, certaines utilisent la dernière
  • Convivialité des calculs - peu importe -- la représentation interne est constituée de matrices, les calculs sont probablement effectués à l'aide de tables de consultation si l'on veut être efficace -- il n'y a pas d'opération directe sur les angles, donc la représentation n'a pas d'importance.

Notez également : toutes les fonctions utilisant les degrés sont dans la norme actuelle (3.2) dépréciées. glRotatef es el uniquement fonction prenant des degrés, ou en fait, un angle tout court. glu est une bibliothèque utilitaire qui n'est pas destinée à un déploiement intensif, et qui est donc conçue pour être lisible, 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 :

13voto

abenthy Points 493

Je dirais que, puisque OpenGL a été conçu avec l'utilisateur final à l'esprit, les degrés ont été utilisés parce qu'on peut spécifier des angles importants ( 90 , 180 , 270 ...) avec des nombres entiers uniquement, et il n'est donc pas nécessaire d'utiliser un système à virgule flottante. GL_PI constant.

5voto

Kristofer Points 21

Je pense que c'est parce que vous devriez être capable d'obtenir une matrice de rotation exacte pour certains angles comme 90 ou 180 degrés. Comme d'autres personnes ici l'ont précisé, si vous utilisez pi/2 au lieu de 90 degrés, les erreurs d'arrondi peuvent conduire à une matrice de transformation qui presque effectue une rotation de 90 degrés.

3voto

MaR Points 734

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

Comme déjà dit - les degrés ONT des avantages - les humains sont plus habitués aux degrés, à comparer : 0,78539816339744830961566084581988... à 45 degrés par exemple :/.

Pour les utilisations avancées d'OpenGL, vous devez fournir vos propres matrices de toute façon.

1voto

Pieter Germishuys Points 3482

Dans la plupart des cas, vous utilisez une bibliothèque mathématique pour convertir les radians en degrés, puis en radians. Je suis d'accord avec la plupart de ce qui a été dit par les super posters précédents.

C'est plus lisible pour les humains.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X