2010-01-27 17 views
67

Los diseñadores de OpenGL nunca temieron las matemáticas, y el conocimiento del álgebra lineal es esencial para todas las aplicaciones de OpenGL menos las más simples. Creo que se puede suponer con seguridad que los programadores de OpenGL están familiarizados con los ángulos en radianes.¿Por qué OpenGL usa grados en lugar de 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 C usa radianes.
  • Casi cualquier otra biblioteca utiliza radianes también.
  • Los radianes son más convenientes en algunos cálculos, p. la longitud de un arco circular.

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

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

+0

Aunque nunca trabajé mucho con OpenGL, me pregunto también, ¿por qué grados en lugar de radianes? Es claro que los radianes son más elegantes en todos los aspectos, como dijiste. – sabiland

+4

A la persona que votó para cerrar: esta es una pregunta real, y debe haber una respuesta definitiva y definitiva por ahí. Tal vez algunos viejos minutos de alguna reunión en SGI, no sé ... – Thomas

Respuesta

33

Debido a que las personas normales son más utilizado para calcular grados: OpenGL está destinado a ser 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: se convierten internamente a 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 a las personas si se les permite usar grados? Cualquiera que codifique seriamente en OpenGL proporcionará sus propias matrices computadas de cuaterniones de todos modos.

En el mismo espíritu que 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 - matrices son más elegantes en todos los aspectos
  • C biblioteca - biblioteca C los utiliza por razones de cálculo, funciones GL teniendo ángulos no están destinados a ser utilizados para computacional tareas pesadas (use matrices directamente), y probablemente la implementación tenga una tabla de búsqueda para grados de todos modos.
  • cualquier otra biblioteca - después de la biblioteca C por las mismas razones que Clib - también, es falsa - muchas bibliotecas C++ permiten una elección, algunas usan la última
  • Competencia de cómputo - no importa - la representación interna es matrices, cálculos probablye realizaron utilizando tablas de búsqueda, si pretende ser eficiente - no hay operación directa de ángulos, por lo que la representación no importa

también tenga en cuenta: todas las funciones utilizando grados son en la norma actual (3.2) obsoleto. glRotatef es la función única que toma grados o, de hecho, un ángulo.glu es una biblioteca de utilidades no diseñada para el despliegue de servicio pesado, por lo tanto, se adapta a la legibilidad, y gluPerspective(... 60.0f..) es mucho más legible y "estándar" en términos de suministro de FOV que gluPerspective(... M_PI/3.0f ...).

notas finales:

+13

¿Llamas a los programadores de OpenGL "gente normal"? Utilizar * degrees * es complicar las cosas, como argumenté, tienes que convertirlas a radianes en cada esquina (salida 'atan2', para nombrar solo un ejemplo). – Thomas

+6

Puede ser otro "grado" de pensamiento de los desarrolladores de OGL que nunca sabremos –

+1

@Thomas: si utiliza la salida atan2, sería vergonzoso no usar cuaterniones y construir matrices de rotación usted mismo;) –

13

yo diría que desde OpenGL fue diseñado con el usuario final en mente, se utilizaron grados porque se puede especificar ángulos importantes (90, 180, 270 ...) con sólo enteros , por lo que no es necesario un punto flotante GL_PI constante.

+4

+1: también muy buen punto :) –

+1

¡Correcto! Por ejemplo, si está haciendo gráficos de estilo ráster de 2-d y quiere cambiar la orientación de la pantalla 90 grados, la implementación podría querer asegurar una matriz de transformación limpia sin error de punto flotante ... la representación de 90 grados en punto flotante no es ambiguo. –

+2

-1. Estoy bastante seguro de que se convierten a radianes internamente para usar en cualquier trigonometría :). – Kos

3

El código es más fácil de leer, facilita la curva de aprendizaje para los novatos y permite el pirateo rápido.

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

Para los usos avanzados de OpenGL, proporcione sus propias matrices de todos modos.

+0

"los humanos están mejor acostumbrados a los grados" No estoy de acuerdo – user3728501

+3

Los humanos están más acostumbrados a los grados. La gente habla de girar 90 grados o "hacer un giro de 180", o 360, 720, 900 o 1080. XBox 360, 1080 Snowboard, las operaciones de PhotoShop son rotaciones en incrementos de 90 grados, etc. Nadie dice "él hizo un PI", o rota esa imagen PI/2 radianes o 1.57 radianes, porque los radianes son números fraccionarios/irracionales, mientras que los grados son a menudo son números enteros que representan alguna división par de un círculo. La mayoría de las operaciones y rotaciones del FOV se realizan en grados, y se piensa en incrementos de 90 grados para cada cuadrante. – Triynko

+2

45 grados es PI/4 radianes, no 0.78539816339744830961566084581988. – robinjam

1

Bueno, lo que ocurre en la mayoría de los casos es que utiliza una biblioteca de matemáticas para convertir de radianes a grados y de vuelta a radianes. Estoy de acuerdo con la mayoría de lo que dijeron los impresionantes carteles anteriores.

Es más legible para humanos.

5

Creo que es porque deberías poder obtener una matriz de rotación exacta para ciertos ángulos como 90 o 180 grados. Al igual que otras personas aquí especificadas, si utiliza pi/2 en lugar de 90 grados, los errores de redondeo pueden dar lugar a una matriz de transformación que casi realiza una rotación de 90 grados.

Cuestiones relacionadas