¿Por qué OpenGL usa grados en lugar de radianes?


Los diseñadores de OpenGL nunca tuvieron miedo de las matemáticas, y el conocimiento del álgebra lineal es esencial para todas las aplicaciones de OpenGL, excepto las más simples. Creo que se puede suponer con seguridad que los programadores de OpenGL están familiarizados con los ángulos en radianes.

Matemáticamente, los radianes son más elegantes que los grados en todos los aspectos. También tienen ventajas prácticas:

  • La biblioteca estándar de C utiliza radianes.
  • Casi cualquier otra biblioteca por ahí utiliza radianes como bien.
  • Los radianes son más convenientes en algunos cálculos, por ejemplo, la longitud de un arco circular.

¿Por qué, entonces, los diseñadores OpenGL decidieron especificar funciones como glRotatef y gluPerspective para usar grados?

(Sé que no tiene importancia práctica, y no va a cambiar de todos modos. Tengo curiosidad, y no pude encontrar la respuesta en OpenGL.org.)

Author: Thomas, 2010-01-27

5 answers

Debido a que la gente normal está más acostumbrada a calcular grados Op OpenGL está destinado a ser utilizado simple. Tenga en cuenta que todas las funciones que operan en grados son funciones de "alto nivel".

Para OpenGL en sí, no hay diferencia si recibe radianes o grados they se convierten internamente en matrices de transformación de todos modos, por lo que no hay ganancia computacional de usar uno u otro.

Entonces, ¿por qué complicar las cosas para la gente si puedes permitirles usar grados? Cualquier persona que codifique seriamente en OpenGL proporcionará sus propias matrices computadas a partir de cuaterniones de todos modos.

En el mismo espíritu podríamos preguntar, ¿por qué tener glRotatef y gluPerspective de todos modos, ya que las matrices son más elegantes en todos los aspectos, y permiten un mayor grado de control.

Punto por Punto:

  • Elegancia - las matrices son más elegantes en todos los aspectos{[17]]}
  • Biblioteca C-La biblioteca C las utiliza debido a razones computacionales, las funciones GL que toman ángulos no están destinadas a ser utilizadas tareas pesadas (use matrices directamente), y probablemente la implementación tenga una tabla de búsqueda de grados de todos modos.
  • cualquier otra biblioteca - siguiendo la biblioteca de C por las mismas razones que Clib also también, es falso many muchas bibliotecas de C++ permiten una opción, algunas usan la última
  • Cómputo conviniency - no importa representation la representación interna es matrices, cálculos probablye hecho usando tablas de búsqueda si está destinado a ser eficiente there no hay ninguna operación directa en ángulos, por lo que la representación no importa

También tenga en cuenta: todas las funciones que utilizan grados están en el estándar actual (3.2) obsoleto. glRotatefes la función solo tomando grados, o de hecho, un ángulo en absoluto. glu es una biblioteca de utilidades que no está diseñada para el despliegue de servicio pesado, por lo tanto, está diseñada para la legibilidad, y gluPerspective(... 60.0f..) es mucho más legible y "estándar" en términos de suministro de FOV de lo que sería gluPerspective( ... M_PI / 3.0f ... ).

Notas finales:

 33
Author: Kornel Kisielewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-27 13:12:57

Yo diría que desde que OpenGL fue diseñado con el usuario final en mente, se usaron grados porque uno puede especificar ángulos importantes(90, 180, 270 ...) con enteros solamente, por lo que no hay necesidad de una constante de coma flotante GL_PI.

 13
Author: abenthy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-27 13:01:27

Creo que es porque usted debe ser capaz de obtener una matriz de rotación exacta para ciertos ángulos como 90 o 180 grados. Como otras personas aquí han especificado, si usa pi / 2 en lugar de 90 grados, los errores de redondeo pueden conducir a una matriz de transformación que casi realiza una rotación de 90 grados.

 5
Author: Kristofer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-24 00:27:05

El código es más fácil de leer, facilita la curva de aprendizaje para los novatos y permite la piratería rápida.

Como ya se ha indicado - los grados TIENEN ventaja - los humanos están mejor acostumbrados a los grados, compare: 0.78539816339744830961566084581988... a 45 grados, por ejemplo :/.

Para usos avanzados de OpenGL usted proporciona sus propias matrices de todos modos.

 3
Author: MaR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-27 13:09:22

Bueno, lo que sucede en la mayoría de los casos es que se usa una biblioteca matemática para convertir de radianes a grados y volver a radianes. Estoy de acuerdo con la mayor parte de lo que se dijo en los carteles impresionantes anteriores.

Es más legible por humanos.

 1
Author: Pieter Germishuys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-27 13:11:29