Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Programación Gráfica: Lineas Rectas en el Espacio 3D

Calcular lineas y sus puntos intermedios

Como ya hemos visto, los objetos en los juegos 3D se definen por 3 arrays que contienen información sobre los vértices, aristas y polígonos. Ya vimos que los polígonos son triángulos definidos por 3 vértices y que el plano en el espacio que contiene a esos polígonos planos puede definirse matemáticamente a partir de las coordenadas de los 3 vértices. Ahora vamos a ver lo mismo pero con las aristas.

Una arista es la linea recta que une 2 vértices. Tanto esta linea como los 2 vértices o puntos de sus extremos están contenidos en una linea de longitud y delgadez infinitas que no tiene ni principio ni fin. Para poder trabajar con estas lineas nos basta con los puntos inicial y final y realmente lo que pase antes y después de esos dos puntos nos tiene sin cuidado. De hecho, cuando nos referimos a estas lineas definidas por dos puntos, ya sean aristas o cualquier otra cosa, les llamamos ‘segmentos de recta’.

Cuando programamos juegos 3D es muy común que necesitemos ubicar puntos dentro de uno de estos segmentos de recta. Por ejemplo saber el punto exacto en el que un rayo golpea a un enemigo o si un objeto se encuentra dentro de una cierta linea, como en una de esas alarmas activadas por laser o algo tan simple como hacer que un personaje avance en linea recta de un punto a otro. Entonces necesitamos un modo de obtener esos valores intermedios a partir tan solo de los puntos en el espacio p0 y p1. Existe algo llamado forma paramétrica de una linea que nos permite calcular precisamente eso. Digamos que queremos obtener el punto P que pertenece a la linea definida por p0 y p1. La ecuación paramétrica de la linea es:

P = p0 + (p1 – p0) * t

O visto por cada componente Px, Py y Pz sería:

Px = p0_x + (p1_x – p0_x) * t
Py = p0_y + (p1_y – p0_y) * t
Pz = p0_z + (p1_z – p0_z) * t

Estas son las 3 expresiones para calcular un punto dentro del segmento de recta definido por los dos puntos en el espacio. Lo mas interesante aquí es el valor de t. Ese valor va a ser igual a cero en el punto inicial del segmento p0 e igual a uno en el punto final p1. En cualquier punto intermedio a estos dos el valor de t se va a mantener entre cero y uno. Si el punto se encuentra fuera de esos extremos el valor va a ser negativo o mayor que uno. Ahora bien, la forma paramétrica se usa para ubicar puntos dentro de la recta, por ejemplo si queremos obtener el punto medio solo sustituimos t por un medio. Aunque puede darse el caso opuesto en que queramos ver si un punto cualquiera en el espacio pertenece o no al segmento de recta. Para hacer esto lo que tenemos que hacer es emplear la forma simétrica de la recta en el espacio. Para obtener esta forma lo único que hacemos es despejar el valor de t en cada una de las expresiones e igualarlas entre si (o simplemente comprobar los valores de t en cada componente. Un punto en el espacio pertenece a la linea en el espacio si al sustituir Px, Py y Pz por sus coordenadas se obtiene el mismo resultado t en las 3 expresiones.

Otros usos de las rectas en el espacio se relacionan con la animación. El motivo por el que el parámetro es representado por la letra t es porque t puede representar el tiempo. Supongamos que queremos hacer que un objeto se mueva del punto p0 al punto p1. Podemos hacer que el objeto aparezca en diversos puntos de esa trayectoria conforme el tiempo t avanza. Incluso es posible agregar términos t de mayor grado para representar curvas mas elaboradas en el espacio. Aunque no es buena idea ir mas allá de las ecuaciones de tercer grado por motivos de eficiencia.

Y hablando de motivos de eficiencia. El trabajo con rectas en el espacio tiene sus trampas, lo mas importante a recordar es que las operaciones geométricas que se usan en programación gráfica son siempre entre rectas y planos en el espacio o solo entre planos. No es buena idea trabajar solo con rectas cuando queramos obtener información. Por ejemplo si queremos saber si dos rectas en el espacio se encuentran, primero tenemos que ver si se encuentran en el mismo plano del espacio y luego obtener los valores de t en cada una de ellas para obtener el punto que tienen en común. Esto es demasiado tardado para una computadora. Lo que se hace, y lo habrán visto en muchos juegos 3D si son observadores, es que cosas como los tiros de rifle, rayos laser o ciertos tipos de ataques de energía dirigida en realidad se representan por pirámides poligonales muy delgadas y no por lineas rectas. Si son lo bastante veteranos y jugaron el primer Star Fox recordarán que los disparos se representaban de esta manera. Es mucho mas eficiente comparar las intersecciones entre estas pirámidas que entre lineas rectas en el espacio.

En fin, lo mas importante es saber cuando usar las rectas en el espacio y cuando los planos. La regla general es que las rectas en forma paramétrica se usan para definir puntos a partir de un parámetro t definido por nosotros y los planos cuando queremos obtener información. Las operaciónes mas importantes entre una linea recta y un plano en el espacio son el recorte y la proyección.

Es posible obtener el plano perpendicular a partir de una linea en forma paramétrica. La diferencia entre las coordenadas nos da las componentes del vector normal al plano y las coordenadas de cualquier punto en la linea, ya sea p0, p1 o cualquier otro punto dado por el parámetro t. Esto nos permite definir un plano perpendicular a cualquier punto dentro de una trayectoria. Por cierto, la forma paramétrica no solo sirve para lineas rectas, se trata de un caso especial de la forma de curvas mas avanzadas.

En la siguiente entrada vamos a ver algo llamado conversión de sistemas de coordenadas, donde verán que todas las transformaciones geométricas pueden reducirse a matrices y que podemos jugar con lo que podríamos llamar ‘cámaras’. Terminando eso ya estaremos en condiciones de trabajar con verdadero 3D. Pues si bien hasta ahora hemos trabajado con un espacio tridimensional XYZ no hemos sido capaces de proyectar una imagen 3D en una superficie plana como la pantalla o una hoja de libreta. Y recuerden que hasta ahora no hemos necesitado de mas herramientas que lapiz papel y calculadora para que luego no digan que no aprenden a hacer juegos 3D porque no poseen una PC con tecnología gráfica super-cara ni el dinero para pagar las licencias de ese software tan exclusivo del que tanto hablan los autodenominados profesionales en los moribundos foros de videojuegos.

About these ads

noviembre 9, 2011 - Posted by | Uncategorized | , ,

Aún no hay comentarios.

Deja un comentario

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

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 45 seguidores

A %d blogueros les gusta esto: