Question

Les concepteurs OpenGL ont jamais eu peur des mathématiques, et la connaissance de l'algèbre linéaire est essentielle pour tous, mais les plus simples applications OpenGL. Je pense qu'il peut être présumé que les programmeurs OpenGL sont familiers avec les angles en radians.

Mathématiquement, radians sont plus élégantes que les diplômes à tous les égards. Ils ont aussi des avantages pratiques:

  • La bibliothèque standard C utilise radians.
  • Quasiment toute autre bibliothèque utilise là radians ainsi.
  • radians sont plus pratique dans certains calculs, par exemple la longueur d'un arc de cercle.

Pourquoi, alors, les concepteurs OpenGL décident de spécifier des fonctions comme glRotatef et gluPerspective à utiliser degrés?

(Je sais qu'il est sans importance pratique, et il ne va pas changer de toute façon. Je suis juste curieux, et je ne pouvais pas trouver la réponse sur OpenGL.org.)

Était-ce utile?

La solution

Parce que les gens normaux sont plus habitués à des degrés calcul - OpenGL est destiné à être utilisé simple. Notez que toutes les fonctions qui fonctionnent sur degrés sont des fonctions de « haut niveau ».

Pour OpenGL lui-même, il n'y a aucune différence si elle reçoit radians ou degrés -. Ils sont convertis en interne des matrices de transformation de toute façon, donc il n'y a pas de gain de calcul d'utiliser l'un ou l'autre

Alors, pourquoi compliquer des choses pour les gens si vous pouvez permettre de les utiliser degrés? Toute personne de codage sérieux en OpenGL fournira leurs propres matrices computated de escouades de toute façon.

Dans le même esprit, nous pourrions demander, pourquoi ont glRotatef et gluPerspective de toute façon, puisque les matrices sont plus élégantes à tous égards, et permettre à un grade supérieur de contrôle.

Point par point:

  • Elegancy - matrices sont plus élégantes dans tous les aspects
  • bibliothèque C - bibliothèque C les utilise pour des raisons de calcul, en prenant des angles fonctions GL ne sont pas destinés à être utilisés pour des tâches lourdes de calcul (matrices d'utilisation directement), et probablement la mise en œuvre a une table de consultation pour les degrés de toute façon
  • toute autre bibliothèque - bibliothèque suivante C pour les mêmes raisons que clib - aussi, il est faux - beaucoup de bibliothèques C ++ permettent un choix, certains utilisent ce dernier
  • Calcul conviniency - n'a pas d'importance - représentation interne est des matrices, des calculs probablye effectués à l'aide des tables de consultation si censé être efficace - il n'y a aucune opération directe sur les angles, donc la représentation n'a pas d'importance

Notez également : toutes les fonctions à l'aide de degrés sont dans la norme actuelle (3.2) dépréciée. glRotatef est la fonction uniquement prise de degrés, ou en fait, un angle du tout. glu est une bibliothèque utilitaire pas destiné à un déploiement robuste, d'où il est adapté à la lisibilité et gluPerspective(... 60.0f..) est beaucoup plus lisible et « standard » en termes de fourniture FOV que gluPerspective( ... M_PI / 3.0f ... ) serait.

Notes finales:

Autres conseils

Je dirais que depuis OpenGL a été conçu avec l'utilisateur final à l'esprit, les degrés ont été utilisés parce que l'on peut spécifier des angles importants (90, 180, 270 ...) avec uniquement des nombres entiers, et donc il n'y a pas besoin de une virgule flottante GL_PI constante.

Je pense qu'il est parce que vous devriez être en mesure d'obtenir une matrice de rotation exacte pour certains angles comme 90 ou 180 degrés. Comme d'autres personnes ici a indiqué, si vous utilisez pi / 2 au lieu de 90 degrés, des erreurs d'arrondi peuvent conduire à une matrice de transformation que presque effectue une rotation de 90 degrés.

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

Comme indiqué déjà - degrés ont l'avantage - les humains sont mieux utilisées à des degrés, comparer: 0,78539816339744830961566084581988 ... à 45 degrés par exemple: /.

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

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

Il est plus facile à lire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top