Система частиц libgdx Z координата

Я хочу визуализировать эффект частиц в 3D, используя координату Z. Я безуспешно пытался реализовать собственный ParticleEffect, используя Decals вместо Sprites.

Есть ли другой способ отрисовать ParticleEffect, используя координату 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();
}

person Roman K    schedule 01.06.2012    source источник
comment
Ваша игра 2D или 3D? Что означает использование координаты Z? Что частицы отображаются в разных размерах на экране? Можете показать скриншот того, что у вас есть?   -  person P.T.    schedule 02.06.2012
comment
Моя игра 3D, но ParticleEffect из libgdx предназначен для 2D (использует только X и Y, без Z), потому что он использует Sprites (2d) внутри и SpriteBatch для рисования. Я хочу, чтобы эффект появлялся частично за ближними объектами и перед дальними объектами с точки зрения перспективы.   -  person Roman K    schedule 04.06.2012


Ответы (1)


Если ваш 3D-эффект представляет собой эффект параллакса, то есть ваши частицы обращены к камере перпендикулярно, вы действительно можете установить матрицу преобразования 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.

person badlogic    schedule 10.06.2012
comment
спасибо, это была последняя подсказка! я обновил вопрос с рабочим кодом. кстати, спасибо за libgdx! - person Roman K; 14.06.2012