Sistema de coordenadas 3D

Básicamente existen dos maneras distintas de trabajar con los ejes de coordenadas, llamadas right-hand y left-hand, la diferencia entre ambos radica esencialmente en el la dirección que se le de al eje Z.
La siguiente imagen ilustra estos dos modelos:
En el modo right-hand el eje Z toma valores más altos (positivos) cada vez que te alejas de la pantalla, es decir, si en este momento te levantas de la silla y retrocedes unos pasos tu valor en el eje Z habrá aumentado unas cuantas unidades, en cambio en el modo left-hand es al revés.
El framework de XNA trabaja por defecto con el modo right-hand, así que tened en cuenta el eje Z a la hora de colocar vuestros objetos en la escena!
Y aquí termina este mini artículo (si es que se le puede llamar así😛 ) Nos vemos en el siguiente y ya sabéis, cualquier duda dejad un comentario.

6 pensamientos en “Sistema de coordenadas 3D

  1. Me gustaría saber si sabes como abordar el problema de hacer una rotacion de un punto en 3D. Me refiero a aplicarle dos rotaciones a la vez, con esto me refiero a aplicarle ambas juntas, no una primero y luego la otra mediante las funciones CreateRotationY(angulo) y CreateRotationZ(angulo). En caso de querer rotar en el eje ‘Y’ y ‘Z’.
    Concretando el problema viene de querer rotar las articulaciones de un humano 3D animado mediante animación esqueletal. He probado a aplicar las transformaciones juntas y por separado pero no da resultado. Es lógico, porque al aplicarle una rotación se cambia el sistema de coordenadas (los ejes), que raramente coincide con el sistema de coordenadas original (me refiero al sistema de coordenadas inicial, el que esta en 0,0,0 que tienes al principio de todo sin hacer ninguna rotación).
    La solución que he encontrado después de mucho consiste en resolverlo mediante uno de las dos técnicas siguientes, ángulos de Euler y/o ángulos RPF. También he visto que XNA tiene una función que justo aplica la solución de ángulos RPF, pero por más que la uso no encuentro con la solución y no encuentro ningún ejemplo/manual/tutorial donde lo use y/o explique. Puedes aportar algo de luz a este asunto.
    Muchas gracias de antemano

    • Creo que podrías usar quaterniones para resolver tu problema, http://en.wikipedia.org/wiki/Quaternion . Básicamente son una forma de representar rotaciones usando un eje de rotación y un ángulo sobre ese eje, con lo cual resuelves tu problema de rotar dos veces en distintos ejes ya que puedes hacerlo con una sola operación.

      En animación esqueletal es bastante común utilizar quaterniones, en este post de gamedev estaban discutiendo sobre este tema: http://www.gamedev.net/topic/540484-skeletal-animation-with-quaternians/ pero si no te sirve estoy seguro que encontrarás más información en google, suerte!

    • Voy a mirar lo que me has mandado porque no tenia ni idea de esa técnica. Si he intentado eso que dices de crear un eje de rotación y rotarlo el ángulo necesario. XNA tiene una funcion que se llama CreateRotation.Cross(eje,angulo) o muy parecida que hace justo eso. O no calcule bien el eje, o no calcule bien el angulo y abandone la idea. Cuando mire la información que me has dado te diré como mefué. Muchas gracias por contestar, eres el primero que me ha contestado y he posteado mucho en muchos foros, ya había perdido la esperanza de que alguien contestara.

    • Muchas gracias por los links. Lo que me ha quedado claro de eso, y porfavor corrígeme si me equivoco, es que usando la función que me mandaste después bastaría con guardar el vector (la posición) anterior y en cada update obtener el nuevo vector (la nueva posición), llamar a esa función con esos argumentos y el resultado es una matriz que la multiplicamos a la matriz de transformaciones de los huesos. Puesto que dentro de esa función lo que calcula es justo el eje a rotar y el ángulo dado el vector donde estaba antes y el vector donde queremos moverlo. ¿Esto es así?

  2. Pingback: Sistema de coordenadas 3D en XNA « Aprendiendo XNA

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s