2012-06-01 15 views
6

Z座標を使用して3Dでパーティクルエフェクトをレンダリングします。私はSpriteの代わりにDecalsを使って独自のParticleEffectを実装しようとしましたが、成功しませんでした。libgdxパーティクルシステムZ座標

Z座標を使用してパーティクルエフェクトをレンダリングする他の方法はありますか?多分、SpriteBatchの変換マトリックスを操作するでしょうか?

更新:

作業コード

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

あなたのゲームは2dか3dですか? 「Z座標を使用する」とはどういう意味ですか?パーティクルが画面上で異なるサイズでレンダリングされることはありますか?あなたが持っているもののスクリーンショットを表示できますか? –

+0

私のゲームは3dですが、libgdxのParticleEffectは内部的にスプライト(2d)を使用し、描画にSpriteBatchを使用するため、2d(XとY、Zは使用しません)用です。私は、エフェクトが部分的に近くのオブジェクトの後ろに表示され、遠方のオブジェクトの前方が視点に関して表示されるようにします。 – kromit

答えて

9

あなたの3D効果は、あなたの粒子がperpendicularilyカメラに直面して、あなたは確かに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(); 

パースペクティブエフェクトの場合は、パースペクティブプロジェクションも使用する必要があります。この要件に対処する最も簡単な方法は、OrthographicCameraの代わりにPerspectiveCameraを使用することです。

+0

ありがとう、それは最終的なヒントでした!質問を作業コードで更新しました。ところでlibgdxに感謝します! – kromit