En la mayoría de gráficos 3D, un punto se representa mediante un vector de 4 componentes (x, y, z, w), donde w = 1. Las operaciones habituales aplicadas en un punto incluyen traslación, escala, rotación, reflexión, sesgo y combinación de estos.
Estas transformaciones se pueden representar mediante un objeto matemático llamado "matriz". Una matriz se aplica en un vector de la siguiente manera:
[ a b c tx ] [ x ] [ a*x + b*y + c*z + tx*w ]
| d e f ty | | y | = | d*x + e*y + f*z + ty*w |
| g h i tz | | z | | g*x + h*y + i*z + tz*w |
[ p q r s ] [ w ] [ p*x + q*y + r*z + s*w ]
Por ejemplo, la escala se representa como
[ 2 . . . ] [ x ] [ 2x ]
| . 2 . . | | y | = | 2y |
| . . 2 . | | z | | 2z |
[ . . . 1 ] [ 1 ] [ 1 ]
y la traducción como
[ 1 . . dx ] [ x ] [ x + dx ]
| . 1 . dy | | y | = | y + dy |
| . . 1 dz | | z | | z + dz |
[ . . . 1 ] [ 1 ] [ 1 ]
Una de las razones para el cuarto componente es hacer una traducción representable por una matriz.
La ventaja de utilizar una matriz es que se pueden combinar múltiples transformaciones en una a través de la multiplicación de matrices.
Ahora, si el propósito es simplemente llevar la traducción a la mesa, entonces diría (x, y, z, 1) en lugar de (x, y, z, w) y haré la última fila del matriz siempre [0 0 0 1]
, como se hace generalmente para gráficos 2D. De hecho, el vector 4-componente se asigna de nuevo al vector normal 3-vector a través de esta fórmula:
[ x(3D) ] [ x/w ]
| y(3D) ] = | y/w |
[ z(3D) ] [ z/w ]
Esto se llama homogeneous coordinates. Permitir esto hace que la proyección de perspectiva expresable con una matriz también, que se puede combinar con todas las demás transformaciones.
Por ejemplo, ya que los objetos más alejados deben ser más pequeñas en la pantalla, transformamos las coordenadas 3D en 2D utilizando la fórmula
x(2D) = x(3D)/(10 * z(3D))
y(2D) = y(3D)/(10 * z(3D))
Ahora bien, si aplicamos la matriz de proyección
[ 1 . . . ] [ x ] [ x ]
| . 1 . . | | y | = | y |
| . . 1 . | | z | | z |
[ . . 10 . ] [ 1 ] [ 10*z ]
entonces la verdadera Las coordenadas 3D se convertirían en
x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1
así que solo tenemos que cortar la z -coordinar para proyectar a 2D.
Consulte el libro "Matemáticas esenciales para juegos y aplicaciones interactivas". –
Un vector normalizado no es "sin magnitud". Los vectores normalizados tienen una longitud/magnitud de 1. – alesplin
¡Gracias! Creo que me dejé llevar por la comprensión. Al menos yo estaba en el camino correcto. ;) –