¿Estándares de coordenadas X, Y, Z?

12

Soy bastante nuevo en el desarrollo 3D de cualquier tipo, sin embargo, juegos. A medida que leo los tutoriales y ejemplos, encuentro que las coordenadas X / Y / Z parecen un poco al revés que mi primera suposición.

Me había imaginado que si una persona estuviera caminando por un campo, su posición X / Y estaría cambiando y si saltaran o subieran o bajaran una colina, entonces su posición Z estaría cambiando. Mis suposiciones parecen estar equivocadas porque caminar alrededor de un campo parece cambiar X / Z y saltar o subir / bajar una colina altera la Y.

1) ¿Son correctas mis observaciones? 3D es nuevo para mí y es posible que no esté pensando en las cosas correctamente.

2) ¿Cuál es la lógica detrás del movimiento horizontal que es X / Z y el movimiento vertical es Y?

3) ¿Sería tan malo de mi parte usar X / Y como movimiento horizontal y Z como movimiento vertical en el Marco XNA?

Corey Ogburn
fuente
Sistemas de coordenadas de mano izquierda / derecha. DirectX es la mano izquierda, el valor predeterminado en OpenGL es la mano derecha.
Jonathan Connell

Respuestas:

19

Sus suposiciones no están equivocadas: cada motor trata estas coordenadas de manera diferente. En términos generales, X es casi siempre el eje Este-Oeste, pero si Y o Z es el eje Altitud tiende a variar. Según tengo entendido, Quake 3, Source Engine y Torque tienen Z como activo. Lo mismo ocurre con la herramienta de modelado 3DS Max. No es raro

Tiene sentido tener un sistema de coordenadas que esté ordenado aproximadamente en orden descendente de importancia, de modo que aplanar una representación en menos dimensiones sea más fácil de entender. Por ejemplo, si su juego está configurado en un mapa de altura 2D, tiene sentido que Z esté 'arriba', porque entonces sus coordenadas X e Y en el mapa mundial 3D directamente a las coordenadas X e Y en el mapa de altura. Por otro lado, si piensas principalmente en términos de renderizado (y muchos desarrolladores de motores de juego lo hacen), estás acostumbrado a que X e Y sean las coordenadas de la pantalla, por lo que agregar un tercer eje naturalmente entra o sale de la pantalla.

Use lo que sea más fácil para usted, pero tenga en cuenta que cualquier elección es arbitraria y que puede necesitar convertir entre ellos y usar múltiples sistemas de coordenadas dentro de un programa.

Kylotan
fuente
De hecho, me gustan más las otras dos respuestas, pero como esta es la respuesta aceptada, una nota para señalar que Y es vertical y Z está en la pantalla es la forma en que la mayoría de las API de hardware 3D están configuradas para funcionar (DirectX y OpenGL) . Si desea su propio sistema, tenga en cuenta esto, ya que es posible que se requiera alguna traducción. (Algo usado de manera inadecuada pero consistente a menudo puede funcionar como se desea, de ahí el 'puede ser' :))
James
1
Técnicamente, OpenGL tiene Z saliendo de la pantalla de forma predeterminada, cuando incluye la dirección, por lo que, aunque tanto DirectX como Z tienen paralelo a la dirección de visualización, ¡siguen siendo incompatibles! Cuando se trabaja con 3D, debe ser competente para pasar de un sistema de coordenadas a otro mediante rotaciones, traslaciones y escalado; de hecho, así es como los modelos terminan en el mundo, por lo que no tiene mucho sentido apegarse demasiado a cualquier noción de un estándar.
Kylotan
Simplemente señalando cuando se trata de millones de triángulos, tal vez cuanto menos tengas que hacer para luchar contra el sistema coordinador del hardware, tal vez mejor;) Al final del día, hacer juegos es divertido a pesar de los niveles de estrés. Haz lo que quieras: )
James
La noción de "Z" como entrar / salir de la pantalla o ser altitud es algo engañosa. Podría ser más fácil conceptualizar las transformaciones. Enviamos coordenadas de vértice 3D / 4D que eventualmente se transforman en un espacio de ventana 2D pero con un valor de profundidad. La idea de que una API inherentemente mapea las coordenadas 3D de X, Y o Z a "profundidad" no es realmente correcta: puede llegar a cualquier transformación que intercambie el significado de las coordenadas. Al final de esa transformación, aún obtendrá coordenadas de espacio de ventana 2D y un valor de profundidad.
PatrickB
1
Sin embargo, no estoy completamente seguro de dónde estamos en desacuerdo: por supuesto, podría usar cualquier espacio de coordenadas que desee siempre que pueda proyectar a x, y, profundidad al final, pero esta pregunta es principalmente sobre por qué existen ciertas convenciones para sistemas de coordenadas, y las convenciones están inevitablemente vinculadas a conceptos del mundo real.
Kylotan
6

Imagínese mirando un trozo de papel extendido frente a usted con una tabla en él, los ejes generalmente están etiquetados como X en la parte inferior e Y en la vertical; Esto deja a Z como el eje externo a lo largo del suelo.

Es simplemente una convención, pero se usa mucho en gráficos donde pensamos que Z es la profundidad de la escena.

En otros campos como CAD, su versión sería más común.

Patrick Hughes
fuente
4

La idea es que los ejes xey permanezcan igual, y está "arriba" en la pantalla y x está al otro lado.

z - la tercera dimensión, los proyectos vuelven a la pantalla (ignorando los problemas de la mano aquí). En 3 dimensiones esto se vuelve un poco extraño, pero para colocar cosas en el espacio de la pantalla tiene más sentido.

3) Puedes hacerlo si quieres, pero sería doloroso y torpe. Aconsejaría que se acostumbrara a los proyectos Z dentro / fuera del monitor.

El pato comunista
fuente
1

1) Sí, sus observaciones son correctas.

2) El sistema de coordenadas XYZ global estándar tiene sentido cuando piensas en términos de un tirador en primera persona, cuando estás mirando a través de los ojos de un personaje en la escena con una matriz de transformación en blanco (identidad). Al igual que cuando dibujas un sistema de coordenadas en una hoja de papel, X apunta a la derecha e Y apunta hacia arriba. De acuerdo con la regla de la mano derecha (x-> pulgar, y-> dedo índice, z-> dedo medio), Z apunta hacia usted.

3) No estaría mal, pero sería una desviación de los estándares. Hay tres problemas en los que puedo pensar en este momento: (a) Digamos que un día quiere usar una biblioteca de física que use el marco de coordenadas estándar. Si no siguió el estándar, ahora tiene que pensar en la transformación que lo lleva de su mundo al mundo de la física. Puede ser molesto cuando quieres arreglar un error. (b) Cuando desee compartir código con alguien o traer a alguien para que lo ayude con el desarrollo, debe acostumbrarse a su convención. (c) Al utilizar modelos 3D estándar, siempre debe tener una transformación por encima de ellos para evitar que se vean de lado.

Ahora, para agregar a la pregunta 2, es muy útil pensar en X, Y y Z no solo como tres letras, sino como correctas, hacia arriba y hacia atrás. Cada personaje en la escena tiene un sistema de coordenadas local adjunto, y en sus marcos de coordenadas locales X siempre tiene la razón, Y está arriba y Z está atrás. Una vez que tenga esto, ahora puede dar sentido a los vectores que imprime o escribir sus algoritmos de una manera que tenga sentido. Digamos que tienes dos caracteres A y B, y quieres hacer algo si uno de ellos está frente al otro. Simplemente puede encontrar la ubicación de B en el marco de coordenadas de A (Ta ^ -1 * p_b), mirar el vector que obtiene y ver si Z (hacia atrás) es negativo y X (derecha) e Y (arriba) son pequeños, porque ese vector te dice cuánto hacia atrás, derecha y arriba es B con respecto a A.

Gazihan Alankus
fuente