2009-02-04 3 views
6

Ho un gioco più o meno 2D, ma renderizzato in 3D. La telecamera sorvola sopra il campo di gioco 2D inclinato di circa 20 gradi da una perpendicolare perfetta per dare una piccola prospettiva 3D ad esso.Ottenere gli sprites per affrontare correttamente la fotocamera in OpenGLES

Ho alcuni sprite che devono essere resi perfettamente quadrati, perché rappresentano oggetti sferici. Il mio primo approccio ha reso i quad piatti sul campo 2D che li hanno posizionati correttamente, ma lo sprite era soggetto alla distorsione prospettica e non si guardava sempre attorno.

Il mio approccio attuale è che quando si riproducono gli sprite, sposto la telecamera in modo perpendicolare al campo di gioco (e agli sprite) che garantisce che i quad non siano mai distorti dalla prospettiva. Lo svantaggio è che la posizione degli sprite è leggermente diversa da dove sarebbero se la fotocamera fosse inclinata.

Quindi, come posso rendere sprite che sono:

  1. perfettamente quadrata e la fotocamera di fronte, ma non mi richiede di spostare la mia macchina fotografica per raggiungere questo obiettivo.
  2. hanno una dimensione che è influenzata dalla distanza dalla telecamera (a differenza di sprite punto)

risposta

10

È possibile ottenere ciò che si desidera utilizzando un poligono rivolto verso la fotocamera in ogni momento. Questo è chiamato "tabellone". Here is un bel tutorial che sembra spiegare la matematica coinvolta e come implementarla usando OpenGL

+1

Grazie, questo è molto utile. –

0

Disegnare il quad perpendicolare alla macchina fotografica come lei suggerisce, ma la posizione loro un po 'sopra il campo. La distanza sopra dovrebbe probabilmente essere il raggio della sfera.

+0

Non sono sicuro di come spostarli aiuterà. E parte del mio problema è che non riesco a capire di quale matematica ho bisogno per fare in modo che il quad sia rivolto verso la telecamera mobile quando non è perpendicolare al campo di gioco. Scusa se non lo sto spiegando bene. È difficile da tradurre in parole. –

0

puoi ancora usare gli sprite di punti ... usando glPointParameter() puoi dargli un'attenuazione di profondità. Attualmente sto usando 0.00025 per la mia attenuazione di profondità per il mio sistema di particelle che ho in sviluppo. il lato negativo è quello delle macchine di 1 gen (presumo che tu stia facendo questo per l'iphone o l'ipod touch) sarai bloccato con una dimensione massima dello sprite di 64x64 pixel

+0

So che questo commento è vecchio ma per i potenziali lettori devo solo sottolineare che c'è un altro aspetto negativo di questo metodo. Il tuo sprite sparirà se il centro è fuori dallo schermo a causa del clipping. – Rene