2012-06-01 40 views
6

Quiero renderizar un efecto de partículas en 3D usando la coordenada Z. Intenté implementar un ParticleEffect propio usando Calcomanías en lugar de Sprites sin éxito.sistema de partículas libgdx Coordenada Z

¿Hay alguna otra forma de representar un ParticleEffect utilizando la coordenada Z? ¿Tal vez manipulando la transformación Matrix del SpriteBatch?

Actualización:

código de trabajo

// 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

¿Es su juego 2D o 3D? ¿Qué significa "usar la coordenada Z"? ¿Que las partículas rinden en diferentes tamaños en la pantalla? ¿Puedes mostrar una captura de pantalla de lo que tienes? –

+0

Mi juego es 3d, pero ParticleEffect de libgdx es para 2d (solo usa X e Y, no Z) porque usa Sprites (2d) internamente y SpriteBatch para dibujar. Quiero que el efecto aparezca parcialmente detrás de los objetos cercanos y delante de los objetos lejanos con respecto a la perspectiva. – kromit

Respuesta

9

Si el efecto 3D es un efecto de paralaje, es decir, sus partículas se enfrentan a la cámara perpendicularily, puede de hecho establecer la matriz de transformación de la 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(); 

Para obtener un efecto de perspectiva, también deberá usar la proyección en perspectiva. La forma más fácil de hacer frente a este requisito es utilizar una CÁLCULA PERSONAL en lugar de una CÁMARA ORTOGRÁFICA.

+0

gracias, esa fue la última pista! He actualizado la pregunta con el código de trabajo. gracias por libgdx por cierto! – kromit