¿Por qué DirectX usa un sistema de coordenadas para zurdos?

49

Consideré publicar en Stack Overflow, pero la pregunta me parece demasiado subjetiva ya que no puedo pensar en una explicación técnica razonable para la elección de Microsoft en este asunto. Pero esta pregunta me ha molestado durante tanto tiempo y el problema sigue apareciendo en uno de mis proyectos, y nunca he visto un intento de explicar esto:

OpenGL utiliza un sistema de coordenadas para diestros, donde la parte + Z del sistema de coordenadas del mundo se extiende hacia el espectador .

DirectX usa un sistema para zurdos donde la parte + Z de la coordenada mundial se extiende a la pantalla, lejos del espectador.

Nunca usé la API de Glide , así que no sé cómo funcionó, pero de lo que puedo recopilar , también utiliza un sistema zurdo.

¿Hay alguna razón técnica para esto? Y si no es así, ¿existe alguna ventaja conceptual para una habilidad particular de un sistema de coordenadas? ¿Por qué uno elige uno sobre el otro?

    
pregunta greyfade 07.11.2010 - 21:34

14 respuestas

64

Sé que esta es una publicación antigua, pero vi que se hacía referencia a esta publicación y no me gustaba el tono de la respuesta elegida.

¡Así que hice un poco de investigación!

  1. DirectX es antiguo . Se lanzó por primera vez en 1995, cuando el mundo tenía mucho más que Nvidia y ATI , DirectX vs OpenGL. Eso es más de 15 años, gente.
  2. Glide de 3dfx Interactive (uno de los competidores de DirectX en el pasado. OpenGL no estaba destinado para juegos en ese entonces) usó una izquierda Sistema de coordenadas de mano.
  3. POV-Ray y RenderMan (el software de renderizado de Pixar), también usa un sistema de coordenadas para zurdos.
  4. DirectX 9+ puede trabajar con ambos sistemas de coordenadas.
  5. Ambos WPF y XNA (que funciona con DirectX en escenas) utiliza un sistema de coordenadas para diestros.

A partir de esto, puedo especular sobre un par de cosas:

  • Los estándares de la industria no son tan estándar como a la gente.
  • Direct3D se creó en un tiempo en que todos hacían las cosas a su manera, y probablemente los desarrolladores no sabían mejor.
  • La zurda es opcional, pero habitual en el mundo de DirectX.
  • Dado que las convenciones se extinguen, todos piensan que DirectX solo puede funcionar con zurdos.
  • Finalmente, Microsoft aprendió y siguió el estándar en las nuevas API que crearon.

Por lo tanto, mi conclusión sería:

Cuando tuvieron que elegir, no sabían del estándar, eligieron el "otro" sistema, y todos los demás simplemente se fueron al paseo. No hay negocios turbios, solo una desafortunada decisión de diseño que se llevó a cabo porque la compatibilidad con versiones anteriores es el nombre del juego de Microsoft.

    
respondido por el Kyte 27.03.2011 - 01:19
35

Me sorprende que nadie mencione algo: OpenGL funciona también en un sistema de coordenadas para zurdos. Al menos, lo hace cuando trabaja con sombreadores y usa el rango de profundidad predeterminado.

Una vez que tiras la tubería de función fija, tratas directamente con "espacio de clip". La especificación de OpenGL define el espacio de clip como un sistema de coordenadas 4D homogéneo. Cuando sigue las transformaciones a través de las coordenadas normalizadas del dispositivo, y hasta el espacio de la ventana, encuentra esto.

El espacio de la ventana está en el espacio de los píxeles de una ventana. El origen está en la esquina inferior izquierda, con + Y subiendo y + X hacia la derecha. Eso suena muy parecido a un sistema de coordenadas para diestros. Pero ¿qué pasa con Z?

El rango de profundidad predeterminado (glDepthRange) establece el valor de Z cercano a 0 y el valor de Z lejano a uno . Así que el + Z se va alejando del espectador.

Es un sistema de coordenadas para zurdos. Sí, puede cambiar la prueba de profundidad de GL_LESS a GL_GREATER y cambiar el rango de profundidad de gl [0, 1] a [1, 0]. Pero el estado predeterminado de OpenGL es trabajar en un sistema de coordenadas zurdos . Y ninguna de las transformaciones necesarias para llegar al espacio de la ventana desde el espacio de clip niega la Z. Por lo tanto, el espacio de recorte, la salida del sombreador de vértice (o geometría) es un espacio para zurdos (algo así. Es un espacio homogéneo 4D, por lo que es difícil precisar la mano).

En la canalización de función fija, las matrices de proyección estándar (producidas por glOrtho, glFrustum y similares) se transforman de un espacio para diestros a uno zurdo . Ellos voltean el significado de Z; Solo revisa las matrices que generan. En el espacio ocular, + Z se mueve hacia el espectador; en el espacio posterior a la proyección, se aleja.

Sospecho que Microsoft (y GLide) simplemente no se molestaron en realizar la negación en sus matrices de proyección.

    
respondido por el Nicol Bolas 01.07.2011 - 14:18
11

Es pura historia. En la antigüedad, los primeros programadores de gráficos rupestres pensaban en el monitor (teletipo? Stonetype?) Visualizando la superficie como papel cuadriculado de dos dimensiones. En matemáticas e ingeniería, las convenciones habituales para trazar puntos de datos en papel cuadriculado son: x = derecha, y = arriba. Entonces, un día, aproximadamente una semana después de la invención de la rueda de silicona, alguien pensó en los gráficos en 3D. Cuando el foco de esta idea parpadeó sobre su cabeza, por cualquier razón, decidieron agregar Z = lejos del espectador. (Auch, me duele la mano derecha al imaginar eso.)

No tenían idea de que algún día sus descendientes lejanos se convertirían en ingenieros, científicos, artistas, artistas comerciales, animadores, diseñadores de productos, etc. y encontrarían los gráficos en 3D útiles. Todas estas excelentes personas modernas utilizan sistemas de coordenadas diestros para ser coherentes entre sí y con los textos matemáticos y las convenciones de física más establecidos.

Es absurdo basar el sistema de coordenadas 3D en la superficie de la pantalla. Es el modelo lo que cuenta: los triángulos y polígonos y planos que describen una casa, una silla, un ogro verde o una galaxia con sobrepeso. Hoy en día, todos diseñamos y modelamos cosas en sistemas XYZ para diestros, y lo hacemos en términos del mundo del modelo, incluso antes de pensar cómo se representará. La cámara se agrega en algún momento, posiblemente hecha para volar de manera loca, y es una infraestructura invisible que convierte el modelo en píxeles que dentro de sus entrañas deben girar con las transformaciones coordinadas del sistema.

Para aumentar la confusión, algunas bibliotecas de gráficos reconocen que los CRT escanean la imagen de arriba a abajo, por lo que tienen Y = abajo. Esto se usa incluso hoy en día en todos los sistemas de ventanas y administradores de ventanas: X11, fvwm, gtk +, Win31 API, etc. El hecho de que los nuevos sistemas de GUI 3D como Clutter, Beryl, etc. traten con Z es un tema aparte del modelado de gráficos en 3D. Esta necesidad solo concierne a los programadores de aplicaciones y diseñadores de GUI.

    
respondido por el DarenW 07.12.2010 - 00:00
10

Ambos son esencialmente equivalentes, ya que uno puede ser fácilmente transformado en el otro. La única ventaja que puedo encontrar para el sistema zurdo es que, dado que los objetos están más alejados del observador, en cualquier dirección (x, y o z), la distancia es un valor más alto. Pero no tengo idea si esta es la razón por la que Microsoft eligió una sobre la otra.

POV-Ray también utiliza un sistema correcto de zurdos.

    
respondido por el tcrosley 07.11.2010 - 22:28
10

El desarrollador principal de DirectX (y Direct3D) Alex St. John comentó recientemente sobre eso. En un artículo sobre la historia de Direct3D, escribió:

  

Se me [...] pidió que eligiera una habilidad para la API de Direct3D. Elegí un sistema de coordenadas para zurdos, en parte fuera de preferencia personal . [...] fue una opción arbitraria .

Fuente: enlace

    
respondido por el Daniel Rikowski 23.07.2013 - 13:27
5

Lo que hay que entender es que se ha desperdiciado una GRAN cantidad de tiempo de programación entre los sistemas de coordenadas zurdos y diestros, y se ha desperdiciado aún más tiempo de programación al recordar qué sistema se necesitaba en un instante determinado. p>

Todo eso desapareció cuando los sistemas de coordenadas para diestros se convirtieron en el estándar de la industria.

Ya hay suficientes sistemas de coordenadas de uso común, sin duplicar el número mediante la introducción de una pregunta de habilidad. Consulte Minkler & Minkler, "Sistemas de coordenadas aeroespaciales y transformaciones" . Si está en el negocio de coordenadas aeroespaciales, por ejemplo, haciendo simulación de vuelo, usted NECESITA ese libro.

Supongo que Microsoft no tenía a nadie en el proyecto DirectX que supiera algo sobre los estándares de la industria, no se dio cuenta de que existía un estándar de la industria y pensó que no importaba.

La otra posibilidad, que sabían que los sistemas para diestros eran el estándar de la industria, y que hicieron DirectX para zurdos deliberadamente, para que sea DIFÍCIL para que las personas conviertan el código que usó DirectX para usar OpenGL. consideración. Si descubriera que este era realmente el caso, encontraría que era necesario embarcarme en una nueva carrera, presumiblemente de corta duración, como asesino del hacha en Redmond.

    
respondido por el John R. Strohm 08.11.2010 - 09:46
5

La respuesta real a la zurda temprana de Direct3D es mucho menos siniestra de lo que algunos de ustedes están especulando. DirectX se inició cuando Microsoft compró RenderMorphics en 1995.

En ese momento, el texto de gráficos estándar utilizado en las oficinas de RenderMorphics era "Principles of Interactive Computer Graphics" de Newmann y Sproul, que hace todo con las coordenadas de la mano izquierda. Es el mismo libro que usé en la universidad. Mirando el código D3D, incluso podría verlos usando nombres de variables que coincidan con las ecuaciones del libro.

No es una conspiración de Microsoft. La decisión se tomó antes de que Microsoft incluso entrara en escena.

    
respondido por el Stephen Coy 18.01.2013 - 02:31
4

Para todos aquellos que piensan que no hay ventaja en la diestra o en la zurda, usted está absolutamente equivocado. La diestra de los sistemas de coordenadas cartesianas proviene de la definición del producto cruzado vectorial. Para los vectores de base XYZ u , v y w , w = u X v .

Esta definición es fundamental para las matemáticas vectoriales, el cálculo vectorial y gran parte de la física. Supongamos que está intentando simular interacciones electromagnéticas. Tienes un vector de campo magnético, M , y una partícula cargada que se mueve en ese campo con la velocidad v . ¿En qué sentido se acelera la carga? Fácil - en la dirección de M X v . Excepto que algún idiota pensó que sería divertido hacer que su sistema de visualización sea zurdo, por lo que acelera en la dirección de -M X v .

Básicamente, cualquier interacción física entre dos cantidades vectoriales se define como diestro, por lo que cada vez que necesite simular esa interacción, es mejor que espere que su sistema de gráficos sea diestro o que tenga que recordar llevar un carro alrededor Signos negativos en todas tus matemáticas.

    
respondido por el Tom 20.06.2012 - 14:19
3

En última instancia, ninguno de los dos es mejor que el otro: estás mapeando las coordenadas 3D a una superficie 2D, por lo que la tercera dimensión (que realmente hace cosas 3D) se puede elegir de forma arbitraria, apuntando al espectador o en la pantalla. De todos modos, va a pasar las cosas a través de una matriz 4x4, por lo que no hay ninguna razón técnica para elegir una sobre la otra. Funcionalmente, se podría argumentar:

  • Existe un consenso bastante amplio en la computación y en otros campos para que el eje X se ejecute de izquierda a derecha (las aviaciones son aparentemente una excepción notable).
  • En matemáticas, el eje Y apunta hacia arriba. (También, arriba es donde van las burbujas).
  • En las pantallas de computadora, el eje Y apunta hacia abajo (porque así es como funcionan las pantallas CRT, y también porque es el orden en que la mayoría de los scripts humanos organizan filas).
  • Cuando mira el lado "visible" de una superficie en el plano X / Y, lo normal debería apuntar hacia el espectador (como cuando mira imágenes de satélite; la "altura sobre el nivel del mar" apunta al satélite , no en el centro de la tierra). Como la normal para el plano X / Y es el vector del eje Z, se deduce que el eje Z también debe apuntar hacia el espectador.
  • Cuando mira imágenes en 3D en una pantalla de computadora, los puntos que están más alejados del espectador deben tener un componente Z más grande. Por lo tanto, el eje Z debe apuntar a la pantalla.

Conclusión : Existe cierto consenso para el eje X, pero para las otras dos, se pueden argumentar ambas direcciones, lo que da como resultado dos configuraciones para diestros y dos para zurdos, y todas forman sentido.

    
respondido por el tdammers 23.08.2011 - 13:17
3

Hecho interesante.

Direct3D (no DirectX - DirectX también cubre entrada, sonido, etc.) en realidad no tiene un sistema de coordenadas para zurdos.

Es perfectamente capaz de soportar sistemas tanto de HR como de LH. Si observa la documentación del SDK, verá funciones como D3DXMatrixPerspectiveFovLH y D3DXMatrixPerspectiveFovRH. Ambos trabajos, y ambos producen una matriz de proyección que se puede utilizar con éxito con el sistema de coordenadas de su elección. Demonios, incluso puedes usar la columna principal en Direct3D si lo deseas; es solo una biblioteca matricial de software y no se requiere que la use. Por otro lado, si desea usarlo con OpenGL, descubrirá que también funciona perfectamente bien con OpenGL (lo que quizás sea la prueba definitiva de la independencia de la biblioteca matricial con respecto a Direct3D).

Entonces, si desea usar un sistema de salud reproductiva en su programa, simplemente use la versión -RH de la función. Si desea usar un sistema LH, use la versión -LH. Direct3D no le importa. Del mismo modo, si desea utilizar un sistema LH en OpenGL, simplemente glLoadMatrix es una matriz de proyección LH. Ninguna de estas cosas es importante y no se parece en nada al gran problema que a veces se ve hecho.

    
respondido por el Maximus Minimus 17.05.2012 - 00:28
0

No hay ninguna ventaja técnica para cualquiera de las dos manos, es completamente arbitrario. Ambos funcionan bien siempre y cuando seas consistente.

Debido a las ventajas de la consistencia, lo ideal sería que uno simplemente "use lo que todos los demás están usando", pero eso es bastante difícil en muchos casos, porque tampoco existe una convención abrumadoramente "preferida" en la práctica: ambas manos son ampliamente utilizadas. En el mejor de los casos, hay cierta coherencia dentro de ciertas comunidades (por ejemplo, OpenGL).

Así que creo que la respuesta básica a esta pregunta es: eligieron lo que eligieron porque se sentía bien (sin duda tenían alguna experiencia previa con esa habilidad) y había pocas razones para no hacerlo.

Al final, no hay mucha diferencia: cualquiera que quiera intercambiar activos / códigos con otros sistemas / comunidades tendrá que estar preparado para lidiar con la conversión de manos de todos modos, porque es un hecho de la vida en gráficos 3D.

    
respondido por el snogglethorpe 22.01.2012 - 03:55
0

Proporcionando esto como material complementario a mi respuesta anterior aquí. De una vieja especificación de OpenGL de la década de 1990:

  

OpenGL no fuerza la zurda ni la derecha en ninguno de sus sistemas de coordenadas.

(fuente: enlace ).

Por lo tanto, dado que ni D3D ni OpenGL imponen ninguna responsabilidad, la verdadera pregunta es: ¿por qué la gente ve esto como algo de gran importancia?

    
respondido por el Maximus Minimus 01.07.2012 - 21:18
-1

Odio decirte, pero la "mano" de un conjunto de coordenadas es en realidad subjetiva, depende de la forma en que imaginas que estás mirando las cosas. Un ejemplo, de la especificación del mapa de cubos OpenGL: si imaginas estar dentro del cubo mirando hacia afuera, el sistema de coordenadas es zurdo, si piensas que mirar desde afuera es diestro. Este simple hecho causa un dolor interminable, porque para obtener una respuesta numéricamente correcta, todas sus suposiciones deben ser coherentes, aunque a nivel local no importa qué suposición haga.

La especificación de OpenGL es oficialmente "neutral en cuanto a la mano" y hace todo lo posible para evitar este problema, es decir, postergarlo al programador. Sin embargo, hay un "cambio de mano" entre las coordenadas del ojo y las del clip: en el espacio del modelo y del ojo que miramos, en el espacio del clip y del dispositivo que estamos mirando. Siempre estoy luchando con las consecuencias de esta complicación accidental, sin duda.

El producto cruzado es nuestro amigo, porque le permite generar un sistema de coordenadas 3D definitivamente diestro o zurdo a partir de un par de vectores. Pero qué mano es depende de cuál de esos vectores llamas "X".

    
respondido por el Thomas Sharpless 10.01.2013 - 22:26
-3

Podría decir que el estándar de la industria es incorrecto desde el primer momento

El estándar de coordenadas de la industria en realidad provino de la coordenada de escritorio, cuando las personas dibujan todo en el escritorio, que es un plano horizontal. X es izquierda / derecha e Y delante / atrás, así que solo hace que Z sea hacia arriba y nació el sistema de coordenadas para diestros

pero Ya sabes Ahora estamos usando con pantalla de monitor Es plano vertical. X sigue siendo izquierda / derecha pero Y es arriba y abajo

Entonces, ¿qué sistema de coordenadas diestro causaría? Hace que + Z sea hacia atrás y -Z sea hacia adelante ¿Qué demonios es esto? Arriba es + y abajo es - Derecha es + e Izquierda es - PERO Adelante es - y Atrás es + ??? Es tan estúpido si hacemos que ese personaje se ejecute en el mundo 3D, pero necesitamos menos z para avanzar. Es por eso que los programadores de juegos aprecian más DirectX

Tomar un estándar que viene del escritorio y usarlo en el monitor es muy incorrecto en muchos niveles desde el primer lugar. Y ahora debemos admitir que ellos, OpenGL e Industry, están equivocados. Simplemente usan lo que creen que los haría sentir cómodos, pero están equivocados y el sistema de coordenadas para diestros es solo un legado no deseado que debe desecharse lo más rápido posible     

respondido por el Thaina 26.07.2013 - 19:18

Lea otras preguntas en las etiquetas

Comentarios Recientes

La respuesta obvia, como los colores fuego y agua, es que estéreo significa un color por cada píxel de color; o que UN color se comparte equitativamente en estéreo y otro color se comparte menos equitativamente. (La conversión de analógico a digital inherente en muchos televisores impide empujar muchos elementos a diferentes frecuencias, pero muy pocos televisores usan la proyección para zurdos). Cuando DirectX solicita la entrada del usuario a una velocidad de cuadro de 120 fps con minits de 0.25 fps, debe calcular... Lee mas