Voy a copiar mi respuesta de Stack Overflow, que también muestra por qué 4-componente de los vectores (y, por tanto, 4×4 matrices) se utilizan en lugar de los 3 componentes.
En la mayoría de los gráficos en 3D de un punto se representa por un 4-vector componente (x, y, z, w), donde w = 1. Las operaciones habituales aplicada en un punto de incluir la traducción, escalado, rotación, reflexión, el sesgo y la combinación de estos.
Estas transformaciones pueden ser representados por un objeto matemático llamado "matrix". Una matriz se aplica en un vector como este:
[ 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 4º componente es hacer una traducción puede representarse por una matriz.
La ventaja de utilizar una matriz es que varias transformaciones pueden combinar en uno solo a través de la multiplicación de la matriz.
Ahora bien, si el propósito es simplemente para traer la traducción en la mesa, luego me iba a decir (x, y, z, 1) en lugar de (x, y, z, w) y hacer que la última fila de la matriz siempre [0 0 0 1]
, como se hace usualmente para gráficos en 2D. De hecho, el 4-vector componente será asignada volver a la normal 3-vector vector a través de esta fórmula:
[ x(3D) ] [ x / w ]
| y(3D) ] = | y / w |
[ z(3D) ] [ z / w ]
Esto se llama homogénea de coordenadas. Permitiendo esto hace que la proyección en perspectiva, que se puede expresar con una matriz, también, que a su vez puede combinar con todos los demás transformaciones.
Por ejemplo, dado que los objetos más alejados debe ser más pequeño en la pantalla, podemos transformar las coordenadas 3D en 2D utilizando la fórmula
x(2D) = x(3D) / (10 * z(3D))
y(2D) = y(3D) / (10 * z(3D))
Ahora, si aplicamos la matriz de proyección
[ 1 . . . ] [ x ] [ x ]
| . 1 . . | | y | = | y |
| . . 1 . | | z | | z |
[ . . 10 . ] [ 1 ] [ 10*z ]
a continuación, el real coordenadas 3D sería
x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1
tan solo tenemos que picar el z-coordinar a proyecto en 2D.