Introducción, puntos y vectores
De IberOgre
Las matemáticas y la geometría del espacio juegan un papel fundamental en el desarrollo de videojuegos 3D. Por tanto, debes tener una base sólida en la materia para poder comenzar a trabajar sobre Ogre. En este artículo introduciremos ciertos conceptos básicos sobre matemáticas en el terreno de los videojuegos y hablaremos sobre puntos y vectores en tres dimensiones.
Contenido |
Matemáticas para videojuegos 3D
Un videojuego es un modelo matemático de un mundo virtual simulado en tiempo real utilizando un ordenador (ya sea un PC, una consola de sobremesa o incluso un teléfono móvil). Es comprensible que para diseñar e implementar estos mundos y sus mecánicas sea necesario conocer ciertos aspectos matemáticos. Estamos hablando principalmente de las ramas de la trigonometría, geometría, algebra lineal, estadística y cálculo. Puede que creas que este bloque de IberOgre pueda ser extremadamente denso o árido pero en el momento en el que te embarques en un desarrollo propio, serás consciente de que es absolutamente imprescindible.
La perspectiva que emplearemos para abordar los conceptos matemáticos no será extremadamente estricta aunque siempre trataremos de mantener la corrección. El objetivo es no desviarnos de los videojuegos y señalar claramente la utilidad de cada apartado con ejemplos muy concretos. Seguramente veas aplicaciones prácticas a muchos de los conceptos que te enseñaron en el instituto.
Es altamente probable que poseas una mínima experiencia desarrollando juegos en dos dimensiones, si es así, contarás con una importante ventaja. Cuando nos enfrentamos a problemas matemáticos en un espacio tridimensional es muy común poder convertirlo en un problema en 2D, mucho más sencillo de resolver. Si bien es cierto que no siempre podemos eliminar o añadir una dimensión para abordar un problema, en la mayoría de ocasiones trataremos de simplificar. Un ejemplo de problema 3D que carece de simplificación en 2D es el producto vectorial ya que no está definido para dos dimensiones.
Puntos
En este bloque del artículo trataremos los puntos en tres dimensiones y haremos un recorrido por las operaciones más comunes que podemos hacer con ellos. En todos los videojuegos 3D es necesario almacenar las posiciones, rotaciones y escalas de todos los objetos, animarlos y convertirlos a posiciones en la pantalla. Prácticamente todos las mallas están compuestas de triángulos y cada vértice viene representado por un punto, por ello, este será el elemento básico que atenderemos.
Definición
El punto es uno de los entes fundamentales de la geometría junto a la recta y al plano. Puede decirse que es una figura geométrica adimensional puesto que carece de longitud, área y volumen. Simplemente representa una posición en el espacio n-dimensional con respecto a un sistema de coordenadas previamente acordado. En los videojuegos bidimensionales la n equivale a 2 mientras que en los tridimensionales equivale a 3.
Sistemas de coordenadas
Para representar un punto necesitamos una referencia a la que llamamos sistema de coordenadas. Existen varios tipos aunque en la inmensa mayoría de situaciones nos ceñiremos exclusivamente a uno.
- Coordenadas cartesianas: es el sistema más utilizado tanto en desarrollo de videojuegos como en otros muchos aspectos. Utiliza tres ejes perpendiculares entre sí así que un punto
se representa por la terna de números reales
.
- Coordenadas cilíndricas: en este sistema se utiliza un eje vertical llamado
(altura o "height"), un eje angular
y un ángulo
. De esta forma podemos definir un punto
a través de la terna
.
- Coordenadas esféricas: se emplea un ángulo de rotación vertical
, otro de rotación horizontal
y una distancia radial
. Siguiendo este sistema un punto queda representado por la terna
.
Ogre funciona con coordenadas cartesianas aunque no por ello hay que despreciar el resto de sistemas. Por ejemplo, un sistema de coordenadas cilíndrico puede ser muy útil cuando queremos modelar un movimiento en espiral. Lo importante es ser conscientes en todo momento del sistema empleado y ser consecuentes con él.
Coordenadas cartesianas: mano derecha e izquierda
En el sistema de coordenadas cartesianas existen dos variantes a la hora
de distribuir los ejes: utilizando la mano izquierda o la derecha. La diferencia
básicamente consiste en el sentido del eje
ya que el
y el
permanecen
iguales. Si consideramos que el eje
apunta hacia arriba y el eje
hacia
la derecha, en un sistema de mano derecha, el sentido positivo del eje
vendría hacia fuera de la pantalla. En cambio, en un sistema de mano izquierda,
el sentido positivo del eje
iría hacia dentro de la pantalla.
Convertir coordenadas de un sistema a otro es muy sencillo ya que sólo debemos
cambiarle el signo a la componente
del punto o vector. Debes ser consciente
de que no son los puntos los que cambian, sino nuestro sistema de referencias.
Cuando utilizamos un motor gráfico debemos ser conscientes de qué sistema
de coordenadas cartesianas utiliza y ceñirlos a él para evitar problemas y
confusiones. Normalmente, en la mayoría de motores se utiliza el sistema
de mano izquierda.
Vectores
En esta sección trataremos los vectores, las operaciones que poseen, sus propiedades y su enorme utilidad dentro del mundo del desarrollo de videojuegos.
Definición
Llamamos vector de dimensión
a una tupla de
números reales. Representamos un vector
de dimensión
de forma:
. Podemos tratar
a los vectores como cantidades que poseen una magnitud y una dirección
en un espacio n-dimensional. En un videojuego tridimensional, lógicamente,
trabajamos con vectores de dimensión 3 con la forma
.
La distinción entre vectores y puntos es muy sútil y a menudo es objeto de confusiones. En la mayoría de bibliotecas matemáticas los puntos y los vectores se representan mediante una misma clase Vector2 o Vector3 (según corresponda). Podemos considerar a los puntos como vectores cuya cola está anclada al origen de coordenadas mientras que los vectores comunes no están fijos. Una manera más sencilla de expresarlo sería diciendo que los puntos son absolutos mientras que los vectores son relativos. Es importante ser conscientes de si se está trabajando con un punto o con un vector.
Operaciones con vectores
Los vectores poseen muchas operaciones que también se aplican a números escalares aunque existen algunas exclusivas de los primeros.
Igualdad
Se dice que dos vectores
y
son iguales si todas sus componentes
lo son.
Suma y resta
La suma de dos vectores
y
se define como
el vector cuyas componentes son el resultado de sumar las componentes
de los dos vectores iniciales. Podemos verlo de una forma gráfica poniendo
la cola de
en la cabeza de
.
Podemos sumar vectores libremente pero mezclar estas operaciones con puntos puede ser delicado. Por ejemplo, la suma de puntos no tiene sentido aunque si la tiene la suma de un punto y un vector. Consideraremos los puntos como posiciones y los vectores como direcciones. La siguiente lista muestra las operaciones posibles:
- dirección + dirección = dirección
- dirección - dirección = dirección
- posición + dirección = posición
- posición - posición = dirección
- posición + posición carece de sentido
Producto por un escalar
El producto de un vector
por un escalar
se define como un nuevo vector cuyas componentes son las de
multiplicadas por
:
Multiplicar un vector por un escalar implica multiplicar la magnitud del vector. Si el escalar es negativo, el sentido del vector se invierte.
Magnitud
La magnitud de un vector
es un número real, se representa
mediante
e indica su longitud. Podemos utilizar el
Teorema de Pitágoras para calcularla:
Dentro de un videojuego utilizamos la magnitud de vectores para calcular
distancias entre dos puntos. No obstante, es una aplicación costosa ya que
incluye una raíz cuadrada y lo mejor es evitarla siempre que sea posible.
Por ejemplo, si queremos comparar una distancia con otra no tenemos que calcular
la raíz cuadrada, podemos simplemente comparar los cuadrados de las distancias.
Esto supondría un ahorro considerable de operaciones.
Llegados a este punto ya podemos resolver varios problemas que se presentan
en el mundo de los videojuegos, por ejemplo el movimiento de un personaje.
Si tenemos su posición
y su velocidad actual
podemos conocer su posición en el siguiente frame si disponemos del tiempo
que ha transcurrido desde el último cuadro
.
Lo que hacemos es sumarle a la posición actual el vector velocidad escalado
por la diferencia de tiempo entre cuadros. Esta técnica es ampliamente utilizada
y se conoce como integración de Euler.
Normalización y vectores unitarios
Se dice que un vector v es unitario cuando su magnitud es 1,
es decir
. Los vectores unitarios son extremadamente
útiles en el desarrollo de videojuegos por lo que muchas veces será necesario
hacer que un vector dado conserve su dirección pero sea unitario. Este proceso
se conoce como normalización y se consigue:
Vectores normales
Se dice que un vector es normal a una superficie cuando es perpendicular a esta. No debemos confundir vectores normales con normalización, lo primero indica perpendicularidad y lo segundo hace referencia al proceso de conseguir un vector de magnitud 1. Obtener vectores normales a superficies se utiliza de forma extensiva en el mundo de los videojuegos para hacer cálculos de luz y colisiones entre otras muchas aplicaciones. Por ejemplo, detectamos que un personaje colisiona con una pared y queremos desplazarlo en dirección opuesta a la pared para que deje de atravesarla, para ello necesitamos la dirección opuesta, un vector normal a la pared.
Producto escalar
Existen dos tipos de productos entre vectores, el producto escalar y el producto
vectorial. No debemos confundir el primero con el producto de un vector
por un escalar. Definimos el producto escalar de dos vectores
y
como un escalar
:
También se puede expresar como:
Siendo
el ángulo entre los dos vectores.
El producto escalar cuenta con las siguientes propiedades:
- Conmutatividad
- Distributividad con respecto a la suma
Podemos proyectar un vector sobre otro gracias al producto escalar. Si
es un vector unitario, entonces
representa la longitud
de la proyección del vector
sobre la recta en la que reposa
.
Si tomamos dos vectores iguales, el ángulo que forman es 0. Si acudimos al segundo método para calcular su producto escalar sabiendo que el coseno de 0 es 1 tenemos:
Esto significa que podemos conocer el cuadrado de la longitud de un vector
calculando el producto escalar consigo mismo. Esto nos ayudará a realizar
consultas sobre la situación relativa de dos vectores:
- Colineares: dos vectores son colineares si
, el ángulo que forman es igual a 0.
- Colineares y opuestos: dos vectores son colineares y tienen sentidos opuestos si
ya que el coseno de 180 es -1.
- Perpendiculares: dos vectores son perpendiculares si
, el ángulo que forman es 90 y el coseno vale 0.
- Misma dirección: dos vectores forman un ángulo menor a 90 grados si
.
- Dirección opuesta: de la misma forma, dos vectores tienen direcciones opuestas si forman un ángulo mayor a 90, es decir,
.
De esta forma podemos saber si un personaje está delante de un enemigo, si dos entidades se dirigen hacia el mismo objetivo, etc.
Producto vectorial
El producto vectorial produce otro vector perpendicular a los dos primeros, esta operación sólo está definida en un espacio tridimensional.
La magnitud del producto vectorial entre dos vectores es igual al producto
de sus magnitudes por el seno del ángulo que forman:
El producto vectorial cuenta con las siguientes propiedades:
- No es conmutativo:
- Anticonmutatividad:
- Distributivo con respecto a la suma:
Como habrás podido imaginar, la aplicación más común del producto vectorial en el desarrollo de videojuegos es encontrar un vector perpendicular a dos ya dados. Se suele emplear con frecuencia de forma interna en los motores de simulación física.
Interpolación de puntos y vectores
En el mundo de los videojuegos es muy común tener que obtener posiciones
intermedias entre dos puntos para animar algún elemento de forma suave.
Por ejemplo, si nuestra intención es que un objeto se mueva de
a
en dos segundos y nuestor juego fluye a 30 cuadros por segundo,
necesitaremos obtener 60 puntos intermedios (estamos suponiendo que el objeto
se moverá a velocidad constante).
Este proceso se conoce como interpolación lineal (LERP) y se define de la
siguiente manera (
):
Conclusiones
En este artículos has aprendido los conceptos básicos de las matemáticas 3D para videojuegos. Hemos visto conceptos muy básicos como la representación de puntos en varios sistemas de coordenadas, los vectores y las operaciones que poseen. A medida que avances por los artículos relacionados con Ogre irás comprobando que todo lo que hemos repasado tiene una utilidad evidente.

