2010-07-17 22 views
5

Sto cercando una matrice di proiezione che possa essere utilizzata in 3D per ottenere l'effetto di un fisheye. Non sto cercando un pixelhader o qualcosa del genere, che manipolerà i pixel, ma la matrice di proiezione effettiva utilizzata nella proiezione dallo spazio 3D sul 2D.Matrice di proiezione Fisheye in Xna/OpenGL - 3D

Grazie.

+0

questo potrebbe essere utile: http://local.wasp.uwa.edu.au/~pbourke/miscellaneous/domefisheye/fisheye/ –

+0

Grazie. Ciò sarà utile in altri scenari che sto guardando. –

risposta

2

Carlos non ha torto ma potresti provare a giocare con il parametro "campo visivo (FOV)" nel tuo generatore di matrici di proiezione.

+0

Grazie a entrambi. Immagino che avrò bisogno di esaminare i miei calcoli Matrix - la mia prima ipotesi è stata anche quella di sperimentare il FOV, ma non ho ottenuto l'effetto desiderato. Sto osservando più di un'approssimazione, piuttosto che pixelperfetto. –

+0

@Einar, come Goz ha detto che Carlos è in the money: il FOV funziona per gli endpoint, li trasforma dove dovrebbero essere, ma traccia comunque la linea retta tra loro. Prova a creare alcune maglie che rappresentano un triangolo - usando un singolo poligono o usando 10 poligoni e usando 1000 poligoni. Quindi prova a giocare con FOV, forse le cose saranno più chiare. – Unreason

11

Questo non è proprio possibile. In coordinate omogenee, le matrici trasformano le linee in linee. Quindi qualsiasi soluzione basata esclusivamente su matrici non riuscirà necessariamente a piegare le linee come si desidera.

0

Carlos ha ragione. C'è un modo in cui potresti fingere, ma dovrai ricreare più volte la scena.

Fondamentalmente, inizi a capire come fare una prospettiva a due punti. Cosa che farei rendendo la scena due volte con una matrice di proiezione che ha un punto di fuga sui lati alternati. Quindi combini le due parti, credo usando una mappa stencil.

Si potrebbe fare qualcosa come la prospettiva a quattro punti che combina le immagini con quattro punti di fuga. Ripeti quel processo tante volte.

Ciò che stai facendo è proiettare su un poligono che si avvicina a una sfera.

Potrei spiegare di più, ma la mia ipotesi è troppo complicata.

Il modo più semplice per simulare è renderizzare una trama e distorcere l'immagine e renderla come quad a schermo intero.

+0

Grazie per l'input - ottima idea. Il mio problema era legato a qualcosa che mi ha fatto arrossire quando l'ho visto. Ho avuto un errore durante la proiezione sullo schermo, che ha causato tutti i miei sforzi nel cambiare il FOV per ottenere l'effetto che volevo inutile. –

Problemi correlati