60 votos

¿Por qué son $3D$ matrices de transformación $4 \times 4$ en lugar de $3 \times 3$?

Antecedentes: Muchas (si no todas) de las matrices de transformación utilizadas en $3D$ gráficos por computadora son de $4\times 4$, incluyendo los tres valores de $x$, $y$ y $z$, más un término adicional que normalmente tiene un valor de $1$.

Dado el extra de computación requiere de un esfuerzo para multiplicar $4\4 veces$ matrices en lugar de $3\times 3$ matrices, debe haber un beneficio sustancial a la inclusión de ese extra de cuarto término, aunque de $3\times 3$ matrices debe (?) ser suficiente para describir los puntos y las transformaciones en el espacio 3D.

Pregunta: ¿por Qué es la inclusión de un cuarto término beneficioso? Puedo adivinar que hace que los cálculos más fácil de alguna manera, pero realmente me gustaría saber por qué ese es el caso.

56voto

dagorym Puntos 2025

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.

46voto

alumb Puntos 2586

aunque las matrices 3x3 debe (?) ser suficiente para describir los puntos y las transformaciones en el espacio 3D.

No, ellos no son suficientes! Supongamos que representan puntos en el espacio utilizando vectores 3D. Usted puede transformar estas usando matrices 3x3. Pero si se examina la definición de la multiplicación de la matriz debe ver de inmediato que la multiplicación de un cero 3D vector por una matriz de 3x3 le da otro vector cero. Así que simplemente multiplicar por una matriz de 3x3 nunca puede mover el origen. Pero traslaciones y rotaciones necesita para mover el origen. Así las matrices 3x3 no son suficientes.

No he tratado de explicar exactamente cómo 4x4 matrices se utilizan. Pero espero que me hayas convencido de que las matrices 3x3 no se suman a la tarea y que se necesita algo más.

13voto

Kevin Dente Puntos 7732

Para el seguimiento de user80 la respuesta, usted desea conseguir transformaciones de la forma v --> Av + b, donde a es Una matriz de 3 por 3 (la parte lineal de la transformación) y b es un 3-vector. Podemos codificar esta transformación en la matriz 4 x 4 por poner Una en la parte superior izquierda con tres 0 abajo y se hace la última columna (b,1). Multiplicando el 4-vector (v,1) con esta matriz se le dará (Av + b, 1).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X