2012-06-01 138 views
6

我想使用Z座標在3D中渲染粒子效果。我試圖用Decals而不是Sprites來實現自己的ParticleEffect而沒有成功。libgdx粒子系統Z座標

是否有任何其他方式使用Z座標呈現ParticleEffect?也許通過操縱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,但ParticleEffect的libgdx是2d(只使用X和Y,沒有Z),因爲它在內部使用Sprites(2D)和SpriteBatch進行繪製。我希望這個效果可以在遠近物體的後面出現,並且在遠視物體的前面出現。 – 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(); 

對於透視效果,您還必須使用透視投影。應對這一要求的最簡單方法是使用PerspectiveCamera而不是OrthographicCamera。

+0

謝謝你,那是最後的提示!我更新了工作代碼的問題。順便謝謝libgdx! – kromit