Programación Gráfica y el Espacio 3D
–Puntos y Vectores en un mundo tridimensional–
Esta entrada es la continuación de la nota donde trato de explicar conceptos básicos de las gráficas por computadora usando solo lapiz, papel y calculadora. Ya hemos visto lo que es un sistema de coordenadas y somos capaces de definir puntos en el espacio. Conocemos los cálculos para convertir puntos entre el sistema de coordenadas de dispositivo, en este caso una hoja de libreta. Antes de entrar con las transformaciones geométricas voy a ponerme a hablar de este espacio en el que existe todo nuestro mundo en 3D.

En la foto se muestran los vectores que forman el espacio tridimensional. Podemos ubicar cualquier punto en el espacio de manera única usando 3 números. Cada uno de estos números nos indican cuantos pasos debemos de dar en la dirección que nos indican las flechas x,y,z. El punto en donde se cruzan las tres flechas se llama Origen y para llegar a él no hay que dar ningún paso en ninguna dirección, por lo que le corresponde el punto (0, 0, 0). Si ustedes construyen una figura como esta pueden ubicar cualquier cosa con una tercia de números. Estas flechitas pueden definir universos enteros pero de momento vamos a quedarnos con nuestra libreta de cuadrícula, lápices y calculadora. Y para ello vamos a reducir esa figura de plastilina a la representación en papel que se ve en la segunda imagen. Ahora veamos lo que es un vector.
Explicar un vector no es nada facil sin recurrir al lenguaje de “sea/tal que/entonces” que viene en todos esos libros de cálculo que tanto aburren a los estudiantes de artes digitales. Para fines prácticos, un vector es una secuencia de números en la memoria de la computadora y en el espacio 3D un vector es una flecha que parte del Origen y que llega a un punto en el espacio. A nivel computadora no hay diferencia entre un punto y un vector y para los cálculos geométricos un punto es representado por el vector que llega hasta él desde el origen. De hecho los componentes de un vector que llega hasta el punto coinciden con las coordenadas del mismo. Piensen en un perro que muerde el punto pero que a la vez está encadenado en el origen. Aunque hay mas cosas interesantes sobre los vectores que iré contándoles cuando sea necesario.
Por cierto, en la nota anterior hice un comentario sobre como figuras como la de la primera foto eran capaces de definir universos enteros. Esto es llamado espacio vectorial y combinaciones lineales. Para que todos me entiendan lo voy a explicar con abejitas y flores. Resulta que los vectores son capaces de tener hijos. En la segunda foto se muestra un vector (la flecha roja) que es una combinación lineal del vector ‘x’ y el vector ‘y’ (las flechas negras). El vector X mide una unidad y sus componentes son 1,0,0 y el vector Y aunque también mide una unidad sus componentes son 0, 1, 0. Las componentes del vector V son 0.75, 0.5, 0. Esas componentes significan que tenemos que multiplicar el vector X por 0.75, el vector Y por 0.5 y el vector Z por 0. Lo que deben de recordar es que aún estos vectores pueden seguir reproduciéndose infinidad de veces. Recuerden esto cuando quieran hacer cámaras múltiples para ver la acción de diferentes puntos de vista.

Los Vectores pueden crear no solo otros vectores, también espacios completos
Algunas otras cosas que deben de recordar sobre los puntos y vectores es que los puntos carecen de dimensiones. Son infinitamente pequeños y carecen de longitud, altura o profundidad. Los vectores son flechas que comienzan en el origen y que terminan o se clavan en un punto del espacio. Un punto se define como el vector que llega hasta él desde el origen. Los espacios pueden ser definidos por un conjunto de estas flechas o vectores. Estos vectores pueden reproducirse y crear nuevos y lo mas importante. Un vector puede ser siempre definido en términos de otros vectores. Por cierto, los vectores aunque tienen magnitud (puede medirse su longitud) carecen de grosor. Son como lineas infinitamente delgadas.
Lo que muchos ya se estarán preguntando es que tiene que ver todo esto con los videojuegos 3D. La respuesta es que estos puntos y vectores se utilizan para definir todos los objetos del juego. Los puntos en el espacio, (o las cabezas de los vectores) en modelado 3D se llaman vértices. Si se unen dos vértices con una linea recta obtenemos una arista. Y si unimos 3 vértices por medio de lineas obtenémos un triángulo plano o cara. Con estos triángulos planos es como se forman todos los objetos 3D de los videojuegos. A mayor cantidad de triángulos mas suaves van a lucir las superficies. Aunque aplicando ciertos algoritmos de iluminación y detalle de superficie puede hacerse pasar una cara plana como si tuviera la textura irregular de una roca o incluso lucir como si tuviera relieve. Estas construcciones pueden ser manipuladas mediante operaciones de transformación geométrica como la traslación que mueve las cosas de un lado a otro, la rotación que hace que giren en torno a un punto determinado y la escala, que las hace cambiar de tamaño. A estas transformaciones a veces se les llama de cuerpo rígido porque alteran una figura sin cambiar la posición en que los vértices se encuentran unos respecto a otros. Y esas transformaciones no solo se usan para mover a los personajes en el campo de batalla sino que también se usan para la vista individual de cada jugador en una partida multiplayer.
Antes de terminar quiero dejar claro una cosa, no existe un solo espacio sino muchos. Cada espacio cuenta con su propio sistema de coordenadas y es importante saber como convertir puntos de un sistema a otro de la manera mas rápida que sea posible. Los sistemas de coordenadas mas importantes son 3 a saber: El sistema de Coordenadas Mundiales que es donde el mundo del juego se desarrolla. El sistema de Coordenadas de Modelado que se usa para construir los personajes del juego (cada objeto tiene su propio sistema de coordenadas) y por último las Coordenadas de Vista. De momento vamos a trabajar de modo tal que estos 3 sistemas de coordenadas coincidan. Mas adelante veremos como separarlos y trabajar con cada uno de manera individual.
Saben, me siento como un estúpido hablando de estas cosas en internet. Solo lo hago porque se que en algún lugar hay alguien que sabe que para hacer videojuegos no basta con estar titulado de lo que sea o tener contactos con gente importante. O que por mucho dinero que le puedan sacar al gobierno nunca van a poder conseguir que esas consolas se programen solas. Se bien que ahí afuera hay alguien queriendo hacer su propio game engine o por lo menos poder usar uno con pleno conocimiento de lo que están haciendo. Y aunque esta información fue pensada en un inicio para los programadores se que los grafistas mas principiantes les vendrá bien saber lo que son los vectores y como estos son independientes de los pixeles.
Por cierto, hace muy poco me volvieron a preguntar que porqué no he fundado mi propia empresa de videojuegos. No es la primera vez que me lo preguntan. Solo digamos que he aprendido de errores ajenos y prefiero no exhibirme mas de lo necesario. Solo puedo decir que cuando eso suceda, primero van a jugar el juego, luego van a querer investigar quien lo hizo y solo entonces sabrán si he logrado fundar una empresa de juegos o no. Puede que algunos disfruten del juego sin que ni siquiera les importe quién lo hizo. Pero prefiero mil veces, si es que un dia hago un buen videojuego (yo solo o con un equipo respaldándome) este vaya por delante mio y no que un juego que sea un fracaso comercial me lleve por delante a mi. Es por eso que no me gusta exhibirme sin un producto de calidad en mis manos. Pero hasta que ese día llegue, seguiré siendo una sombra mas en el internet. Una sombra que comparte con ustedes sus modestos (o debería decir molestos) conocimientos de Programación en Lenguaje Ensamblador.


Esto ya me esta gustando mas,
Y esto no es nada todavia, preparate para lo que viene