¿Por qué DirectX usa un sistema de coordenadas zurdo?

52

Pensé en 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 diestro, donde la parte + Z del sistema de coordenadas mundial se extiende hacia el espectador.

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

Nunca utilicé la API Glide , así que no sé cómo funcionó, pero por lo que puedo deducir, también usa un sistema zurdo.

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

Greyfade
fuente
55
Esto parece preguntar por qué el árabe y el hebreo se escriben de derecha a izquierda, mientras que todos los demás idiomas se escriben de izquierda a derecha.
Gabe
17
Solo estoy tratando de entender por qué hay una inconsistencia tan evidente entre las API de gráficos, que comparten una base sólida en matemáticas. La dirección de los alfabetos semíticos definitivamente no se basa en reglas inmutables.
greyfade
3
Se hizo referencia a esta pregunta en Por qué no contratamos programadores .NET (2011-03-25).
Peter Mortensen
2
Ni OpenGL ni Direct3D son puramente diestros o zurdos. Los cambios anteriores al zurdo en el espacio del clip mientras que el espacio de la pantalla del último es diestro, es decir, en el espacio de la pantalla del D3D, la rotación de X a Y cuando se ve desde el lado + Z es una rotación en sentido antihorario. Y ambos sistemas permiten a los desarrolladores emplear espacios de cualquier quiralidad.
legends2k
1
@PeterMortensen Es bastante curioso cómo todos los que odian .NET ni siquiera saben lo que es. A lo que probablemente se refieren es a ASP.NET Webforms, el marco. .NET se puede describir como la biblioteca de clase base y el CLR.
The Muffin Man

Respuestas:

64

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

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

  1. DirectX es viejo . Fue lanzado 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 a jugar en ese entonces) usaba un sistema de coordenadas zurdo.
  3. POV-Ray y RenderMan (software de renderizado de Pixar), también usan un sistema de coordenadas para zurdos.
  4. DirectX 9+ puede funcionar con ambos sistemas de coordenadas.
  5. Tanto WPF como XNA (que funcionan con DirectX debajo de escena) usan un sistema de coordenadas diestro.

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

  • Los estándares de la industria no son tan estándar como las personas.
  • Direct3D se creó en un momento en que todos hacían las cosas a su manera, y los desarrolladores probablemente no lo sabían mejor.
  • La zurda es opcional, pero habitual en el mundo DirectX.
  • Dado que las convenciones se extinguen, todos piensan que DirectX solo puede funcionar con la mano izquierda.
  • Microsoft finalmente aprendió y siguió el estándar en cualquier API nueva que creara.

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 siguieron el viaje. No es un negocio sospechoso, 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.

Kyte
fuente
11
DirectX es un bebé en pañales en comparación con los gráficos de computadora en 3D, y eso es relativamente joven en comparación con los programas de computadora que tienen que administrar múltiples sistemas de coordenadas 3D y transformarse entre ellos. Fue a mediados de la década de 1970 cuando tomé la clase de gráficos por primera vez, y AÚN ENTONCES el instructor (Frank Crow) nos estaba presionando fuertemente para que utilizáramos exclusivamente sistemas de coordenadas diestros. En 1983, estaba trabajando en un trabajo que no tenía gráficos, pero que tenía transformaciones de coordenadas en curso, y una primera regla obligatoria de la mano derecha fue la primera nota del proyecto emitida. (¡Y no lo emití!)
John R. Strohm
77
No estoy seguro de que la edad tenga algo que ver con eso. ¿Acaso la mayoría de las ciencias físicas no utilizan un sistema de coordenadas diestro, y han tenido muchos, muchos más años que las computadoras? Diría que es una convención mucho más antigua que las que siguen Glide y luego DX.
Thomas Owens
3
El hecho de que un estándar se use en el mundo académico no significa que será el mismo en aplicaciones industriales / de otro tipo. Después de todo, las personas siguen lo que se usa en su propio campo. De lo contrario, los sistemas gráficos tendrían su origen en la esquina inferior izquierda de la pantalla en lugar de en la esquina superior izquierda. Además, el punto sobre la edad es que DX nació cuando todo el tema de "renderizado 3D para el escritorio" todavía era nuevo, y los "estándares" y las "mejores prácticas" aún no se habían desarrollado por completo.
Kyte
1
a) Entonces, usted llama a mi respuesta, que es una simple lista de hechos comprobables y lo que yo llamo explícitamente mi propia especulación personal, "supersticiosa" y "sin fundamento en los hechos", cuando su propia oferta es una acusación de mal comportamiento corporativo sin citación o respaldando en absoluto? b) Si no te gusta mi respuesta, siempre puedes dar la tuya. Cuando di esta respuesta, la respuesta aceptada ya tenía un año. Eres libre de agregar más conocimiento, si sientes que tienes algo que aportar. c) Es difícil crear un monopolio cuando su posición en el mercado es inestable. Esta no es la EM multinacional moderna.
Kyte
2
@ Kyte 3Dfx tenía API propietarias por una razón específica, para encerrarlo en su hardware. Obligaron a los usuarios finales a comprar su hardware porque los desarrolladores fueron "sobornados" para escribir juegos que solo funcionaban con 3Dfx. Microsoft quería encerrarte en su API para que los desarrolladores solo escribieran juegos para Windows, lo que finalmente mató a 3Dfx. Decisiones comerciales simples y simples, no mal comportamiento. Esto todavía está sucediendo hoy. Nvida quiere que te encierres en sus tarjetas con CUDA, AMD quiere usar OpenCL, 2012, el mismo razonamiento detrás del comportamiento. Esto es historia, estaba en la industria en ese momento.
37

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

Una vez que descarta la canalización de función fija, trata directamente con "clip-space". La especificación OpenGL define el espacio de clip como un sistema de coordenadas homogéneo 4D. Cuando sigue las transformaciones a través de coordenadas de dispositivo normalizadas, y baja al 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 hacia arriba y + X hacia la derecha. Eso suena muy parecido a un sistema de coordenadas diestro. ¿Pero qué hay de Z?

El rango de profundidad predeterminado (glDepthRange) establece el valor Z cercano a 0 y el valor Z lejano a uno . Entonces el + Z se aleja del espectador.

Ese es un sistema de coordenadas zurdo. Sí, puede cambiar la prueba de profundidad de GL_LESS a GL_GREATER y cambiar glDepthRange de [0, 1] a [1, 0]. Pero el estado predeterminado de OpenGL es trabajar en un sistema de coordenadas zurdo . 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 clip, la salida del sombreador de vértice (o geometría) es un espacio para zurdos (un poco. Es un espacio homogéneo 4D, así que es difícil precisar la mano).

En la tubería 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 para zurdos . Cambian el significado de Z; solo verifique las matrices que generan. En el espacio para los ojos, + Z se mueve hacia el espectador; en el espacio posterior a la proyección, se aleja.

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

Nicol Bolas
fuente
44
Interesante de hecho. Confieso que nunca miré tan de cerca. Si bien mi pregunta se refiere específicamente al espacio mundial, su respuesta me da que pensar.
greyfade 01 de
Descubrí que cambiar el rango de profundidad o la prueba de profundidad lo hacía con la mano derecha, pero el uso de ambos se cancelaba entre sí y me daba un sistema para zurdos.
hultqvist
1
Intrigante. Mire la transformación de profundidad de la ventana gráfica: z_wiewport = z_clip * (lejos-cerca) / 2 + (cerca + lejos) / 2. Eso hace que el espacio del clip -1 se asigne a cerca y +1 a lejos. Por lo tanto, el espacio de clip en sí mismo puede considerarse con la mano IZQUIERDA , aunque aún puede revertir cómo se asigna a la ventana gráfica más adelante.
Kos
1
@NicolBolas: ¿Notaste que incluso Direct3D no es puramente zurdo ya que su espacio en la pantalla es diestro? X de izquierda a derecha, Y de arriba a abajo y Z lejos del espectador, es decir, X a Y es una rotación en sentido antihorario cuando se ve desde el lado opuesto al eje Z.
legends2k
1
@bobobobo " Noté que la matriz de vista generada por gluLookAt también puede cambiar la disposición" - No, no lo hace. Así es como se calcula el vector directo, pero esta matriz es, sin embargo, una transformación de cuerpo rígido ordinario en el espacio derecho (y, de hecho, + z es "hacia atrás" en el espacio derecho). Negar el vector hacia adelante no tiene nada que ver con cambiar la disposición del espacio de coordenadas.
Chris dice que reinstala a Mónica
11

Es pura historia. En la antigüedad, los primeros programadores de gráficos de cuevas pensaban que la superficie de visualización del monitor (teletipo? Tipo de piedra?) Era un papel cuadriculado bidimensional. En matemáticas e ingeniería, las convenciones usuales 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 silicio, alguien pensó en gráficos en 3D. Cuando el foco de esta idea parpadeaba sobre su cabeza, por cualquier razón, eligen agregar Z = lejos del espectador. (Ay, me duele la mano derecha solo de 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 útiles los gráficos 3D. Todas estas buenas 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 una tontería basar el sistema de coordenadas 3D en la superficie de la pantalla. Es el modelo lo que cuenta: los triángulos, los polígonos y los planos que describen una casa, una silla, un ogro verde con sobrepeso o una galaxia. Hoy en día todos diseñamos y modelamos cosas en sistemas XYZ 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 intestinos deben moverse con transformaciones coordinadas del sistema.

Solo para aumentar la confusión, algunas bibliotecas de gráficos reconocen que los CRT escanean la imagen de arriba a abajo, y también tienen Y = abajo. Esto se usa incluso hoy en todos los sistemas de ventanas y administradores de ventanas: X11, fvwm, gtk +, Win31 API, etc. La forma en que los nuevos sistemas GUI 3D como Clutter, Beryl, etc. tratan con Z, es un problema separado del modelado de gráficos 3D. Esta necesidad solo concierne a programadores de aplicaciones y diseñadores de GUI.

DarenW
fuente
1
Todo muy interesante, y ciertamente explica la lógica detrás de GL de SGI. ... Pero, ¿cómo explica esto que DirectX sea zurdo?
greyfade
Varios sistemas 2D y 3D derivaron sus convenciones de una historia común.
DarenW
10

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

POV-Ray también usa un sistema de corrida zurdo.

tcrosley
fuente
55
Sí, creo que muchos principiantes gráficos encuentran que z aumenta con la profundidad de la pantalla de forma más natural. Pero también quieren que x aumente hacia la derecha yy hacia arriba, estilo "ejes de gráfico". Esto les da un sistema de coordenadas zurdo. Solo más tarde, cuando intentan hacer cosas más complejas, se dan cuenta de que están fuera de sintonía con el mundo diestro de ciencia / matemáticas / ingeniería.
2010
66
@Timday, tienes que enseñarles a los novatos los gráficos secretos en 3D sin apretón de manos. Extienda su mano derecha, con el pulgar, el dedo índice y el dedo medio extendidos, todos en ángulo recto entre sí. El pulgar es X, el dedo índice es Y, el dedo medio es Z. Ahora mueva la mano para alinearse con las coordenadas que desee e inmediatamente sabrá cómo el movimiento afectará las transformaciones.
John R. Strohm
3
@ John: ¡Oye, adivina qué, los físicos también tienen el mismo apretón de manos secreto!
timday
1
@John Aunque estoy completamente de acuerdo con las ventajas de un sistema diestro, usted sabe que su regla de apretón de manos (que todos deberían haber aprendido en la escuela) también se puede usar con la mano izquierda para el sistema zurdo.
Chris dice que reinstala a Mónica el
@ChristianRau, qué mano usas depende de qué tipo de sistema de coordenadas estás tratando de describir, diestro o zurdo.
John R. Strohm
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ó:

Me pidieron que [...] eligiera una mano para la API Direct3D. Elegí un sistema de coordenadas zurdo, en parte por preferencia personal . [...] fue una elección arbitraria .

Fuente: http://www.alexstjohn.com/WP/2013/07/22/the-evolution-of-direct3d/

Daniel Rikowski
fuente
Es una elección arbitraria solo si no tiene idea de lo que está haciendo el resto del mundo, que el resto del mundo se ha estandarizado de facto en los sistemas de coordenadas diestros para gráficos.
John R. Strohm
1
@ JohnR.Strohm: ¿incluso leíste el artículo vinculado?
Maximus Minimus
Link-rot se ha comido esa página. Aquí está la última instantánea de trabajo: web.archive.org/web/20161101112002/http://www.alexstjohn.com/WP/…
Max Barraclough
5

Lo que hay que entender es que se ha desperdiciado una ENORME cantidad de tiempo del programador convirtiendo entre sistemas de coordenadas zurdos y diestros, e incluso se ha desperdiciado aún más tiempo del programador recordando qué sistema se necesitaba en un instante en particular.

Todo eso desapareció cuando los sistemas de coordenadas 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 al introducir una pregunta de mano. Ver Minkler y Minkler, "Transformaciones y sistemas de coordenadas aeroespaciales" . Si está en el negocio de coordenadas aeroespaciales, por ejemplo, haciendo simulación de vuelo, NECESITA ese libro.

Mi conjetura es 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 había un estándar de la industria y pensó que no importaba.

La otra posibilidad, que sabían que los sistemas diestros eran el estándar de la industria, y deliberadamente hicieron DirectX para zurdos, para que sea DURO que las personas conviertan el código que usó DirectX para usar OpenGL, no tiene en cuenta. Si descubriera que este es realmente el caso, me resultaría necesario embarcarme en una carrera nueva y presumiblemente efímera como asesino de hachas en Redmond.

John R. Strohm
fuente
No quería decir que criticaba a Microsoft en mi pregunta, así que no quería mencionar la posibilidad de que fuera por la incompatibilidad con OpenGL que tenían en mente.
greyfade
3
@greyfade: OK, entonces déjame ponerlo de esta manera. No hay ninguna razón técnica para preferir las coordenadas para zurdos a las coordenadas para diestros, o viceversa. Sin embargo, hay muy, muy buenas razones hoy en día para preferir las coordenadas diestras, y para alquitrán, emplumar y viajar fuera de la ciudad en un ferrocarril, cualquiera que incluso susurra una pista de implementar algo usando las coordenadas zurdas. ¿Eso lo hace más simple?
John R. Strohm el
No sé si podría reunir una cantidad de justa indignación por eso. Trabajo con PostScript con bastante regularidad como parte de mi trabajo (donde las coordenadas comienzan con [0, 0] como la esquina inferior izquierda y el máximo en la esquina superior derecha), por lo que la conversión de coordenadas es una especie de hecho de la vida aquí.
Inaimathi el
2
Uh, ¿entonces esto es 100% de especulación? ¿Por qué está marcado como la respuesta?
Factor Mystic
3
Me gana, es solo una diatriba sin sentido e, irónicamente, como el sistema de coordenadas zurdo, muchas personas simplemente lo aceptaron por alguna razón.
Quick Joe Smith el
5

Para todos aquellos que piensan que no hay ventaja para los diestros o zurdos, estás absolutamente equivocado. La diestra de los sistemas de coordenadas cartesianas proviene de la definición del producto vectorial cruzado. Para vectores de la base de XYZ u, vy 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. Suponga que está tratando de simular interacciones electromagnéticas. Tiene un vector de campo magnético M, y una partícula cargada que se mueve en ese campo con velocidad v. ¿De qué manera se acelera la carga? Fácil - en la dirección de M X v. Excepto que un 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 de vectores se define como diestra, por lo que cada vez que necesite simular esa interacción, es mejor que espere que su sistema de gráficos sea diestro o tendrá que recordar cargar con signos negativos en todas tus matemáticas

Tom
fuente
La electromagnética no es el único lugar donde surge el producto cruzado. También aparece en aerodinámica y mecánica orbital. La simulación de vuelo tiene que lidiar con esto, y aquí es donde los sistemas de coordenadas físicas y los sistemas de coordenadas gráficas chocan. Ver Minkler & Minkler, citado en mi respuesta anterior.
John R. Strohm
@Tom: No estoy seguro si esto es cierto; tome 3 vectores, digamos (1, 0, 0), (0, 1, 0) y (0, 0, 1), realizar ixj da k ya que la fórmula para el producto cruzado está bien definida y los números no tienen quiralidad / entrega; es solo el humano quien interpreta los tres vectores con cierta mano, incluso entonces podemos elegir interpretarlo con ambas manos y seguirá siendo consistente, es decir, en un zurdo ixj = k estará lejos mientras que en el diestro ixj = k será hacia. Eso sí, yo también soy un tipo diestro, pero aún así este es el hecho.
legends2k
@ legends2k: Sí, supongo que es cierto, siempre y cuando no quieras que tus números signifiquen nada. Tan pronto como desee que sus números representen una interacción física, o las coordenadas en un sistema de visualización, o realmente cualquier cosa, entonces es muy importante.
Tom
@Tom Tienes razón en que debemos dar sentido al número. Eso realmente importa. Pero esa todavía no es la razón para decir que la mano izquierda está sobre la mano derecha. Podría darle un significado a 0,0,1adelante y eso es zurdo, así que 1,0,0 X 0,1,0make 0,0,1es zurdo
Thaina
@Tom En realidad, cuando se hace Física en un sistema de coordenadas para zurdos, la fórmula está quieta, M X vpero Mse considera que el campo magnético apunta en la dirección opuesta porque es un pseudovector. Puede usar las mismas ecuaciones en cualquier sistema: lo único que cambia es su interpretación de la forma en que los pseudovectores "apuntan". Los vectores adecuados, como la aceleración, siempre funcionarán igual en cualquier sistema de coordenadas. en.wikipedia.org/wiki/Pseudovector#The_right-hand_rule
Oscar Benjamin
5

La verdadera respuesta a la zurda temprana de Direct3D es mucho menos siniestra de lo que algunos de ustedes especulan. DirectX comenzó cuando Microsoft compró RenderMorphics en 1995.

En ese momento, el texto gráfico estándar utilizado en las oficinas de RenderMorphics era "Principios de gráficos de computadora interactivos" de Newmann y Sproul, que hace todo con coordenadas para zurdos. Es el mismo libro que usé en la universidad. Mirando el código D3D, incluso podría verlos usando nombres de variables que coinciden con las ecuaciones del libro.

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

Stephen Coy
fuente
Estoy de acuerdo con un comentario aquí de que esto suena como una leyenda urbana, pero es bueno tener tu perspectiva personal.
Josiah Yoder
3

En última instancia, ninguno de los dos es mejor que el otro: está asignando coordenadas 3D a una superficie 2D, por lo que la tercera dimensión (que realmente hace que las cosas sean 3D) se puede elegir arbitrariamente, apuntando al espectador o a la pantalla. De todos modos, va a poner las cosas en 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 informática y otros campos para que el eje X se ejecute de izquierda a derecha (las aviaciones aparentemente son una notable excepción).
  • En matemáticas, el eje Y apunta hacia arriba. (Además, 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 ese es el orden en el 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 debe apuntar hacia el espectador (como cuando mira imágenes satelitales; la "altura sobre el nivel del mar" apunta al satélite, no a el centro de la tierra). Como lo 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 la pantalla de una computadora, los puntos que están más lejos 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 puede argumentar por ambas direcciones, produciendo dos configuraciones para diestros y dos para zurdos, y todas tienen sentido.

tdammers
fuente
3

Dato interesante.

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

Es perfectamente capaz de soportar sistemas RH y LH. Si busca en la documentación del SDK, verá funciones como D3DXMatrixPerspectiveFovLH y D3DXMatrixPerspectiveFovRH. Ambos funcionan y ambos producen una matriz de proyección que se puede utilizar con éxito con su sistema de coordenadas de elección. Demonios, incluso puedes usar column-major en Direct3D si lo deseas; es solo una biblioteca de matriz de software y no es necesario que la use. Por otro lado, si desea usarlo con OpenGL, encontrará que también funciona perfectamente bien con OpenGL (que es quizás la prueba definitiva de la independencia de la biblioteca matricial de Direct3D).

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

Maximus Minimus
fuente
0

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

Debido a las ventajas de la consistencia, idealmente uno debería simplemente "usar 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 mano) y había pocas razones para no hacerlo.

Al final, hace poca diferencia: cualquiera que quiera seriamente intercambiar activos / código con otros sistemas / comunidades tendrá que estar preparado para lidiar con la conversión de la mano de todos modos, porque es una realidad en los gráficos 3D.

snogglethorpe
fuente
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 mano izquierda o derecha en ninguno de sus sistemas de coordenadas.

(fuente: http://www.opengl.org/documentation/specs/version1.2/opengl1.2.1.pdf ).

Entonces, dado que ni D3D ni OpenGL imponen ninguna mano, la verdadera pregunta es: ¿por qué la gente ve esto como algo importante?

Maximus Minimus
fuente
1
¿Por qué lo publicaste en una respuesta separada? Quiero decir que podrías editar tu respuesta anterior para agregar esto, ¿no?
mosquito
-1

Odio decírtelo, pero la 'mano' de un conjunto de coordenadas es realmente 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 imagina estar dentro del cubo mirando hacia afuera, el sistema de coordenadas es zurdo, si piensa en mirar desde afuera es diestro. Este simple hecho causa un dolor infinito, porque para obtener una respuesta numéricamente correcta todas sus suposiciones tienen que ser consistentes, aunque localmente no importa qué suposición haga.

La especificación OpenGL es oficialmente "neutralidad en la entrega" y hace todo lo posible para evitar este problema, es decir, posponerlo en el programador. Sin embargo, hay un "cambio de mano" entre las coordenadas del ojo y las coordenadas del clip: en el modelo y el espacio del ojo que estamos viendo, en el espacio del clip y del dispositivo 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 de qué mano depende depende de cuál de esos vectores llame "X".

Thomas Sharpless
fuente
3
El producto cruzado es anticomutativo. A x B == - B x A. Como tal, un producto cruzado se define para tomar un primer vector no colineal y un segundo vector, escrito en ese orden, y producir un tercer vector, normal al plano que contiene el primer y el segundo vector , y de una dirección apropiada para crear un sistema de coordenadas diestro cuando los vectores se enumeran en el orden (primero, segundo, resultado). Si eliges pervertir esto, siéntete libre, PERO SEA AVISADO: si lo haces a mi alrededor, será mejor que disfrutes de alquitrán, plumas y astillas en el trasero de tu viaje en tren fuera de la ciudad.
John R. Strohm
Muy bien, John; pero aún tiene que enfrentar el hecho de que tal perversión es posible, lo que significa que no existe la "diestra absoluta", lo que significa que aún depende de usted y de mí obtener los signos correctos.
Thomas Sharpless
-3

Podría decir que el estándar de la industria está mal desde el principio

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

Pero ya sabes, ahora lo estamos usando con la pantalla del monitor. Es plano vertical. X sigue siendo izquierda / derecha pero Y es arriba y abajo

Entonces, ¿qué causaría el Sistema de coordenadas diestro? Hace que + Z sea hacia atrás y -Z hacia adelante ¿Qué demonios es esto? Arriba es + y Abajo es - Derecha es + e Izquierda es - PERO Adelante es - y Atrás es + ??? Es muy estúpido si hacemos que el personaje del juego se ejecute en el mundo 3D, pero necesitamos menos z para seguir adelante. Es por eso que el programador de juegos aprecia más DirectX

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

Thaina
fuente
2
-1 por ignorancia. La convención de la mano derecha proviene de la física y las matemáticas, específicamente la operación de productos cruzados de vectores, que es fundamental para la teoría del campo electromagnético y la mecánica. La informática lo adoptó porque el uso original de las computadoras era reducir números.
John R. Strohm
Debería -1 por su ignorancia en su lugar. Como dije "física de coordenadas de escritorio", las matemáticas y las matemáticas de antaño siempre funcionan en el escritorio, no en el monitor, así que lo llamé "coordenadas de escritorio" porque se calcula la física y las matemáticas en el escritorio horizontal
Thaina