Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Programación Gráfica y el Producto Vectorial

–Y su uso en cámaras y superficies en los juegos 3D–

Conocido también como el Producto Cruz, el producto vectorial es otra herramienta importante en programación gráfica. Sirve para obtener un tercer vector a partir de otros dos vectores. Este tercer vector es ortogonal (está en ángulo recto) respecto a los otros dos y su magnitud se relaciona tanto con la de los dos vectores originales como con el ángulo que hay entre ellos. En los juegos 3D su mayor utilidad es la de crear sistemas de coordenadas en cualquier parte del espacio a partir de los dátos de una cámara aunque también se utiliza muchísimo al trabajar con superficies y texturas. Ahora veamos como funciona el producto vectorial

En la primera imagen vemos una representación del producto vectorial. Como siempre, los dos vectores que se van a procesar deben de estar anclados en el origen (y si no lo están hay que hacer una traslación). Luego hacemos el producto cruz con los vectores U y V en ese orden. Tras hacer la operación vamos a obtener las componentes de un tercer vector. Ese vector es UxV y se muestra en la foto como la flecha vertical mas pequeña. Antes de meternos con los complicados cálculos matemáticos para obtener UxV veamos algunas propiedades interesantes del producto vectorial aplicables a los juegos 3D.

Lo primero que vemos en la foto es que las flechas de madera y plastilina que representan los vectores U y V descansan en la mesa. Esta mesa representa un plano en el espacio y no es necesario que sea horizontal. Los dos vectores pueden estar en cualquier posición sobre un plano en el espacio. El vector UxV se mantiene vertical sobre la mesa, lo que significa que UxV es un vector perpendicular al plano que contiene los vectores U y V. Este vector UxV está en ángulo recto con los otros dos y su longitud es igual al producto de las longitudes de U y V multiplicadas por el Seno del ángulo que los separa. Esto último es especialmente importante para obtener información sobre el plano en el que se encuentran los vectores originales así como la relación que hay entre ellos. Lo primero es que si los vectores U y V son paralelos (el ángulo entre ellos es 0 o 180 grados o bien 0 o Pi radianes) la longitud de este vector va a ser cero. Esto es muy importante cuando trabajamos con las caras poligonales que forman un objeto 3D. Del mismo modo, si el ángulo entre los vectores U y V es recto (90 grados o 0.5 Pi radianes) el seno del ángulo será igual a uno y la longitud del vector UxV será directamenté igual al producto de las longitudes de sus vectores originales. Esto es especialmente importante al trabajar con las bases ortonormales que se usan para hacer las vistas de cámara.

Por cierto, si hasta ahora no hemos visto la utilidad del producto cruz es porque hemos estado trabajando en el plano XY que forma la hoja de la libreta. Si hiciéramos un producto cruz entre dos vectores en este plano, el resultado sería un vector que saldría hacia afuera de la hoja, o hacia adentro dependiendo del orden en que tomáramos los vectores. El orden en que se toman los vectores influye en que el vector tome una de dos direcciones perpendiculares a los vectores originales. Para entender esto, y otras complejidades del producto escalar es importante que entienda la regla de la mano derecha.

La regla de la mano derecha

Para poder orientarnos en el espacio 3D es necesario adoptar una convención de hacia donde crece el eje Z. La regla de la mano derecha se usa para definir hacia donde va Z en el espacio. Digamos que tenemos dos vectores U y V en el espacio y queremos saber hacia donde se va a dirigir el vector UxV. Para averiguar esto hay que hacer lo siguiente: Primero extienda el brazo derecho con los dedos extendidos en la dirección a la que apunta el primer vector U. Ni se le ocurra hacer esto en público si vive en Alemania porque es delito. Luego doble todos los dedos excepto el pulgar en la dirección que apunta el vector V. Rote el brazo si es necesario. Por último extienda el dedo pulgar. La dirección en la que apunta el pulgar será la que va a tomar el vector UxV. En la foto donde sale una mano junto al modelo del producto vectorial puede verse la regla de la mano derecha en acción. Otra aplicación que tiene la regla de la mano derecha en juegos 3D es la rotación. Es posible saber la forma como un objeto va a rotar dados un vector fuerza y un centro de rotación. Otro buen ejemplo de la vida diaria de la regla de la mano derecha son las roscas de los tornillos y las tapas de las botellas. Solo hay que señalar con el dedo pulgar hacia donde queremos que estos se muevan y al doblar los dedos estos nos indicarán el sentido en el que tenemos que girar.

Por cierto, la regla de la mano derecha es básica para entender el origen y funcionamiento del producto vectorial. Su origen se basa completamente en eso, si quieren saber mas acerca del producto vectorial pueden encontrar mas información en cualquier libro de matemáticas escolar. Por cierto, hasta ahora he hablado mucho de para que sirve pero no he dado nada de información sobre como se calcula. Para ello lo primero que necesitamos es tomar los 2 vectores que queremos cruzar en ese orden. En la última imagen se toman los vectores tridimensionales U y V cuyas componentes son Ux, Uy, Uz y Vx, Vy, Vz respectivamente. Queremos obtener el producto cruz UxV y almacenarlo en un nuevo vector llamado N. Para calcular las componentes Nx, Ny y Nz hacemos los siguientes cálculos

Nx = Uy*Vz – Uz*Vy
Ny = Uz*Vx – Ux*Vz
Nz = Ux*Vy – Uy*Vx

Hay varias maneras de calcular esta fórmula, de momento y para no meternos con términos matemáticos complicados me limitaré a darles un consejo para recordar mejor esta expresión. Lo llamo El 1221. Recordar que hay una resta de dos productos es sencillo, así como recordar que los factores de esos productos van en el mismo orden en el que se lleva a cabo la operación de producto vectorial, en este caso primero U y luego V. La parte dificil es recordar cuales son las componentes vectoriales que necesitamos tomar en cada caso. Aquí es donde entra la técnica 1221. Tenemos 3 componentes vectoriales, el primero es X, el segundo es Y y el tercero es Z. Para calcular por ejemplo el componente X del vector N (Nx) necesitamos tomar las componentes de los 2 vectores en este orden YZZY, para Ny ZXXZ y para Nz XYYX. Aquí es donde entra el 1221, pues son los índices relativos al índice que queremos calcular. Si la suma da un resultado mayor que 3 se le resta 3 al resultado y obtenemos la posición, si eso se les hace muy complicado mejor busquen la fórmula del producto cruz por medio la matriz de cofactores o usando directamente la forma del determinante, conocida en tiempos remotos como “el método de la lluvia”.

Para acabar solo queda mencionar el modo como el producto vectorial se asocia a los polígonos en un objeto 3D. Un polígono o cara triangular se define por 3 vértices no colineales en el espacio. Para obtener 2 vectores a partir de estos 3 puntos se hace una resta entre los vértices que forman 2 de las aristas y luego se hace con ellas un producto vectorial. Este proceso se va a ver con mas detalle en la siguiente entrada cuando veamos como esos 3 vértices definen una cara plana en un objeto 3D y todo lo que se puede hacer con esta. Por ahora tengan paciencia y recuerden que un programador de videojuegos no le teme a las matemáticas.

Anuncios

octubre 30, 2011 - Posted by | Uncategorized

1 comentario »

  1. Muy bien explicado gracias!

    Comentario por Javier | agosto 23, 2015 | Responder


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

A %d blogueros les gusta esto: