Pregunta

Estoy haciendo un detrás de las cortinas de simulación 3D al intentar mostrar el mundo en mi motor isométrico 2d. Nunca he hecho un motor isométrico antes, y mi matriz matemática es oxidado en general, así que estoy teniendo problemas.

Tengo una matriz de proyección, que en su forma más simple es la siguiente:

 0.7       0.35     0
 0        -0.87     0
-0.71      0.35     1

Un par de señales se voltean porque mis motores sistema de coordenadas es 0,0 en la parte superior izquierda, con + X a la derecha / este y + Z para el sur.

Ahora, la inversa de la que es:

1.4080  0.5670   0.0000
0.0000 -1.1490   0.0000
1.0000  0.8050   1.0000

Ahora, estas matrices sobre todo trabajo.

Por ejemplo

WC: 500,0,500 = Screen: -1,44, 350, 500 (X e Y son correctos)

WC: 0,0,500 = Screen: -355, 175, 500 (X e Y son correctas de nuevo)

Pero, ahora si tiene que ir a otro lado, ya no tiene ese valor de Z a mano, por lo que

Screen: -1,44, 350, 0 = WC: -2, -402,97, 0 (. Por lo tanto, la basura)

Y mucho más -. Tan pronto como ya no tengo ese valor Z, no puedo recuperar las coordenadas mundiales de las coordenadas de pantalla

¿Cuál es la solución aquí?

Editar

Debo señalar que el punto de la unproject es conseguir un rayo de recogida de ratón ..

Parece que es sólo mi percepción errónea de lo que estaba haciendo que me estaba metiendo la pata aquí.

¿Fue útil?

Solución

A medida que descubrió, su conversión de nuevo en el espacio 3D requiere algún tipo de coordenada Z tener ningún sentido en absoluto.

Yo sugeriría que lo hace la transformación inversa dos veces . Una vez con una coordenada Z cerca de la pantalla (la más cercana al observador), y una vez con una coordenada Z en el fondo de la escena 3D. Estos dos puntos 3D que darían una línea 3D, que ocuparía todas las posiciones "detrás" de ese punto 2D.

Otros consejos

no se puede. realice la proyección sobre la pantalla que pierde información.

Si se piensa en ello, varias coordenadas 3D consiguen proyectan en el mismo punto de la pantalla, y el hecho de saber coordinar esa pantalla no es suficiente para recuperar la coordenada original.

[editar] mirar sus coordenadas de la pantalla, se les da todo valor z 0. lo que significa que las últimas columnas de su matriz de proyección debe tener todos los ceros, lo que hace que la matriz no invertible.

Cada píxel de la pantalla representa una línea desde el ojo del espectador en el mundo 3D imaginario detrás de la pantalla. Tienes que intersectan esta línea con lo que los objetos pueden estar al acecho en ese mundo con el fin de obtener coordenadas 3D.

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