2012-06-01 15 views
6

Voglio rendere un effetto particellare in 3D usando la coordinata Z. Ho cercato di implementare un proprio ParticleEffect usando Decals invece di Sprites senza successo.libgdx particle system Coordinata Z

C'è qualche altro modo per rendere un ParticleEffect usando la coordinata Z? Forse manipolando la trasformazione Matrix di SpriteBatch?

Aggiornamento:

codice funzionante

// update projection each frame since my camera is moving 
spriteBatch.setProjectionMatrix(camera3d.projection); 

for (ParticleEffect effect : effects){ 
    spriteBatch.setTransformMatrix(camera3d.view); 
    spriteBatch.getTransformMatrix().translate(x,y,z); // different for each effect 
    spriteBatch.getTransformMatrix().scale(0.1f,0.1f,0.1f); //optional 
    spriteBatch.begin(); 

    effect.draw(spriteBatch, delta); 

    spriteBatch.end(); 
    spriteBatch.getTransformMatrix().idt(); 
} 
+0

Il tuo gioco è 2D o 3D? Cosa significa "usare la coordinata Z"? Che le particelle rendono in diverse dimensioni sullo schermo? Puoi mostrare uno screenshot di quello che hai? –

+0

Il mio gioco è 3d, ma ParticleEffect di libgdx è per 2d (usa solo X e Y, no Z) perché usa Sprites (2d) internamente e SpriteBatch per disegnare. Voglio che l'effetto appaia parzialmente dietro agli oggetti vicini e davanti a oggetti lontani nel rispetto della prospettiva. – kromit

risposta

9

Se l'effetto 3D è un effetto di parallasse, significa che le vostre particelle di fronte alla telecamera perpendicularily, è possibile infatti impostare la matrice di trasformazione del SpriteBatch

batch.getTransformMatrix().idt().translate(0, 0, z); 
batch.begin(); 
... do your rendering here 
batch.end(); 
// reset the matrix, so you can use the batch for other stuff 
batch.idt(); 

Per un effetto prospettico dovrete anche usare la proiezione prospettica. Il modo più semplice per far fronte a questo requisito è utilizzare una PerspectiveCamera anziché una OrthographicCamera.

+0

grazie, questo è stato l'ultimo suggerimento! ho aggiornato la domanda con il codice funzionante. grazie per libgdx comunque! – kromit