Pregunta

Estoy empezando a aprender acerca de la representación 3D y he estado haciendo un buen progreso. He recogido una gran cantidad con respecto a las matrices y las operaciones generales que se pueden realizar sobre ellos.

Una cosa que todavía no estoy muy siguiente es el uso de OpenGL de matrices. Veo esto (y cosas como que) mucho:

x y z n
-------
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Así que mi mejor entendimiento, es que es un normalizado (sin magnitud) 4, matriz de la columna-principal dimensiones. También que esta matriz, en particular, se llama la "matriz de identidad".

Algunas preguntas:

  • ¿Qué es la dimensión "enésimo"?
  • ¿Cuándo y cómo se aplica esto?

Mi mayor confusión se debe a la forma en OpenGL hace uso de este tipo de datos.

¿Fue útil?

Solución

La respuesta corta que pueden ayudarle a empezar es que la dimensión 'enésima', como usted lo llama, no representa ninguna cantidad visualizable. Se añade como una herramienta práctica para permitir multiplicaciones de matrices que causan la proyección de la traducción y la perspectiva. Una matriz de 3x3 intuitiva no puede hacer esas cosas.

Un valor 3d que representa un punto en el espacio siempre obtiene 1 adjunto como el cuarto valor para hacer este trabajo truco. Un valor 3D que representa una dirección (es decir, una normal, si está familiarizado con ese término) consigue 0 adjunta en el cuarto punto.

Otros consejos

En la mayoría de los gráficos 3D un punto está representado por un vector de 4-componente (x, y, z, w), donde w = 1. Las operaciones habituales aplicados en un punto incluyen la traducción, escalado, rotación, reflexión, sesgando y combinación de estos.

Estas transformaciones pueden ser representados por un objeto matemático llamado "matriz". Una matriz se aplica en un vector como esto:

[ 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 usar una matriz es que múltiples transformaciones se pueden combinar en una a través de la multiplicación de matrices.

Ahora, si el propósito es simplemente para llevar traducción sobre la mesa, entonces yo diría que (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 normalmente para los 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 homogénea coordenadas . Permitir que esto hace que la proyección de perspectiva expresable con una matriz también, que puede de nuevo 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 ]

A continuación, las coordenadas 3D reales serían

x(3D) := x/w = x/10z
y(3D) := y/w = y/10z
z(3D) := z/w = 0.1

así que sólo tenemos que picar la coordenada z a proyectar a 2D.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top