Semestre 02, 2026
La diferencia entre ambos está en dónde se coloca el observador respecto al personaje.
Cámara en primera persona, donde el observador y el personaje ocupan el mismo punto.
La cámara sigue al personaje principal desde afuera, manteniéndolo siempre a la vista.
Lakitu, el personaje que carga la cámara en Super Mario 64, es la representación literal de esta idea.
Rota alrededor de un punto objetivo manteniendo una distancia fija, que llamamos radio.
Esa restricción es justamente lo que la hace útil. El objetivo nunca se sale de cuadro, porque la cámara está construida para no perderlo de vista.
Una cámara se describe con tres valores, y los tres son vectores.
Es mucho más manejable que la contraparte, que sería describir la cámara con ángulos sueltos. Con vectores podemos aplicar operaciones entre ellos mismos para calcular los valores que nos interesan.
No es el arriba definitivo de la cámara, sino una referencia que le dice al sistema qué dirección considerar como vertical. A partir de esa pista se calcula el arriba real, que sí es perpendicular a la dirección de visión.
El proceso mediante el cual convertimos una escena 3D en una imagen 2D. Para lograrlo vamos a usar cambios de base, que es cambiar el sistema de coordenadas en el que viven nuestros vectores.
El vector morado no cambió. Lo único que cambió es el espacio en el que lo estamos describiendo.
Vamos a calcular los tres ejes que forman la nueva base. Los tres salen de eye, center y up, y los tres se normalizan.
Es el valor más fácil de calcular. Se obtiene restando center menos eye, que es el vector que va de la cámara hacia el objetivo, también llamado forward.
$$ \text{forward} = \text{normalize}(\text{center} - \text{eye}) $$En la convención de cámara que usamos, el eje Z de la base apunta hacia atrás, en sentido contrario a la dirección de visión, así que la cámara mira hacia el Z negativo.
Es el eje que apunta a la derecha de la cámara, y sale del producto cruz entre el forward y el vector up.
Es el arriba real de la cámara, y se obtiene con otro producto cruz, esta vez entre el eje X y el forward.
Es el que corrige el up que dimos como referencia. Aunque el up original no fuera exactamente perpendicular a la dirección de visión, el resultado de este producto cruz sí lo es, así que la base queda ortogonal.
Con los tres ejes calculados y normalizados tenemos una base ortonormal, que es todo lo que hace falta para expresar cualquier punto del mundo en coordenadas de cámara.
Describen la orientación de un objeto en un espacio 3D mediante rotaciones sobre los tres ejes. Siempre se manejan en radianes.
Si imaginamos la escena desde arriba, el movimiento se ve claramente como una órbita alrededor del objetivo.
El ángulo se puede representar como el arcotangente de Z sobre X, tomando los componentes del vector radio.
$$ \theta = \arctan\left(\frac{radio_z}{radio_x}\right) $$Se usa la versión de dos argumentos, con el componente Z y el componente X del radio. Esa versión es la que sirve, porque resuelve el signo correcto en los cuatro cuadrantes.
Con el yaw solo teníamos una órbita plana. Al agregar el pitch esa órbita se convierte en una esfera completa, porque ahora la cámara también puede subir y bajar.
El cateto adyacente aquí no es todo el eje X, sino la proyección del radio sobre el plano horizontal.
$$ \varphi = \arcsin\left(\frac{radio_y}{\lVert radio \rVert}\right) $$Rotación sobre el eje Z, el eje que apunta en la dirección de visión. Es el movimiento de inclinar la cabeza hacia un hombro.
Como es posible pasarse de los valores válidos al acumular rotaciones, hace falta limitar los ángulos, y cada uno se limita de forma distinta.
Casi ningún juego permite girar 360 grados en la vertical, porque la cámara terminaría de cabeza y el vector up se invertiría. Lo normal es limitarlo a 90 grados hacia arriba y menos 90 grados hacia abajo.
Hasta este momento describimos la cámara con un radio y dos ángulos. Para colocarla en el mundo hay que convertir esa descripción a coordenadas cartesianas.
$$ x = r \cos(\varphi) \cos(\theta) $$ $$ y = r \sin(\varphi) $$ $$ z = r \cos(\varphi) \sin(\theta) $$Esas tres fórmulas dan un desplazamiento respecto al origen, no una posición absoluta. Para obtener la posición final de la cámara hay que sumarlo al punto objetivo.
La posición de la cámara se calcula siempre a partir del center, así que el objetivo queda en el eje de la órbita por construcción.
En gráficas por computadora trabajamos con dos sistemas de coordenadas al mismo tiempo.
Posiciones y direcciones absolutas dentro de la escena.
Posiciones y direcciones relativas a la cámara.
Un vector expresado en coordenadas de cámara se pasa a coordenadas de mundo como una combinación lineal de los ejes de la cámara.
$$ \mathbf{v}_{world} = v_x \cdot \mathbf{right} + v_y \cdot \mathbf{up} + v_z \cdot \mathbf{forward} $$Se hace proyectando el vector sobre cada eje con producto punto. Como la base es ortonormal, esa proyección es todo lo que hace falta y no hay que invertir ninguna matriz.