Domanda

Sto facendo un dietro le tende di simulazione 3D durante il rendering del mondo nel mio motore isometrico 2D. Non ho mai fatto un motore isometrico prima, e la mia matrice matematica è arrugginito in generale così sto avendo problemi.

Ho una matrice di proiezione, che nella sua forma più semplice è questo:

 0.7       0.35     0
 0        -0.87     0
-0.71      0.35     1

Un paio di segni sono capovolte, perché i miei motori di sistema di coordinate viene 0,0 in alto a sinistra, con + X a destra / est e + Z a sud.

Ora, l'inverso di ciò è:

1.4080  0.5670   0.0000
0.0000 -1.1490   0.0000
1.0000  0.8050   1.0000

Ora, queste matrici per lo più di lavoro.

Per esempio

WC: 500,0,500 = Schermo: -1,44, 350, 500 (X e Y sono corretti)

WC: 0,0,500 = Schermo: -355, 175, 500 (X e Y sono corretti di nuovo)

Ma, ora, se avete bisogno di andare nella direzione opposta, non hai più che il valore Z a portata di mano, in modo da

Schermo: -1,44, 350, 0 = WC: -2, -402,97, 0 (. Così, spazzatura)

e molto altro ancora -. Non appena non ho più che il valore Z, non riesco a recuperare le coordinate mondo dal coordinate schermo

Qual è la soluzione qui?

Modifica

Vorrei sottolineare che il punto del unproject è quello di ottenere un raggio per la raccolta del mouse ..

Sembra come se fosse solo la mia percezione sbagliata di quello che stavo facendo che mi stava strizzando qui.

È stato utile?

Soluzione

Come hai scoperto, la vostra conversione nello spazio 3D richiede un qualche tipo di coordinata Z per dare un senso a tutti.

Vorrei suggerire che si fa la trasformazione inversa due volte . Una volta con una coordinata Z verso lo schermo (il più vicino all'osservatore), e una volta con una coordinata Z nella parte posteriore della scena 3D. Questi due punti 3D darebbe una linea 3D, che avrebbe occupato tutte le posizioni "dietro" quel punto 2D.

Altri suggerimenti

Non è possibile. si sta proiettando sullo schermo che perde informazioni.

Se ci pensate, diverse coordinate 3D ottenere proiettate sullo stesso punto dello schermo, e solo sapendo di coordinate che lo schermo non è sufficiente a recuperare l'originale di coordinate.

[modifica] guardando le vostre coordinate dello schermo, si dà loro tutto il valore z 0. il che significa che le ultime colonne della matrice di proiezione dovrebbe avere tutti gli zeri, rendendo quella matrice non invertibile.

Ogni pixel sullo schermo rappresenta una linea dall'occhio di chi guarda al mondo immaginario 3D dietro lo schermo. Bisogna ad intersecare questa linea con tutto ciò che gli oggetti possono annidarsi in quel mondo, al fine di ottenere le coordinate 3D.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top