Вывести модель на передний план?

1

У меня есть облачная модель, и она продолжает идти за фоновой сценой (называемой "стеной" в коде). Как мне принести облачную модель на передний план, чтобы она никогда не отставала?

Код выглядит следующим образом:

public class RocketBlast extends DemoWrapper implements InputProcessor, ApplicationListener {
private static final Vector2 GRIDSIZE = new Vector2(16, 16);


FloorGrid floor;
private DecalBatch decalBatch;
private SpriteBatch spriteBatch2d;
private GroupStrategy strategy;
// private DecalSprite[] walls = new DecalSprite[5];
private DecalSprite wall;
private ArrayList<DecalSprite> walls = new ArrayList<DecalSprite>();

private MeshHelper cloud;
private DecalSprite shadow;
// camera
private Camera cam;
private GuOrthoCam oCam;
private GuPerspCam pCam;
private String camType = "ortho";
private boolean debugRender = true;
private Vector2 screenSize;
private Vector2 last = new Vector2(0, 0);
private Builder builder;

@Override
public void create() {
    Gdx.gl.glEnable(GL10.GL_DEPTH_TEST);
    Gdx.gl10.glDepthFunc(GL10.GL_LESS);

    builder = new Builder();
    builder.addIslands();


    screenSize = new Vector2(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    oCam = new GuOrthoCam(screenSize.x, screenSize.y, GRIDSIZE);
    oCam.position.set(8, 1, -17);
    oCam.setTargetObj(builder.target);

    pCam = new GuPerspCam(50, 50, 50);

    cam = oCam; 

    floor = new FloorGrid(GRIDSIZE);

    String objfile = "data/volumetric_cloud_tutorial.obj";
    cloud = new MeshHelper(objfile);
    cloud.scale(0.5f, 0.5f, 0.5f);
    cloud.setPos(1, 1f, 5);
    cloud.setColor(1, 1, 0);
    cloud.setMotion(1,0, 0, 0.02f);
    cloud.setTexture();



    addWalls();

    // batches
    strategy = new CameraGroupStrategy(cam);
    decalBatch = new DecalBatch(strategy);
    spriteBatch2d = new SpriteBatch();
    spriteBatch2d.enableBlending();


    Gdx.input.setInputProcessor(this);
}



private ArrayList<DecalSprite> addWalls() {

    wall = new DecalSprite().build("data/i.png");
    wall.sprite.rotateY(90);
    wall.sprite.setPosition(GRIDSIZE.x, 1, 8);
    wall.sprite.setDimensions(17, 2);
    walls.add(wall);

    return walls;
}




@Override
public void render() {
    GL10 gl = Gdx.app.getGraphics().getGL10();
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    float delta = Gdx.graphics.getDeltaTime();

    cam.update();
    cam.apply(gl);

    setUpLighting(gl);



    gl.glColor4f(0, 1, 0, 1f);
    floor.render(gl, GL10.GL_LINE_STRIP);
    gl.glColor4f(1, 0, 0, 1f);

    for (DecalSprite oneWall : walls) {
        decalBatch.add(oneWall.sprite);
    }

    cloud.update(delta);
    cloud.render(gl, GL10.GL_TRIANGLES);




    //decalBatch.add(shadow.sprite);

    decalBatch.flush();

    cam.update();
    cam.apply(gl);
    // decalBatch.add(player.sprite);
    decalBatch.flush();

    cam.update();
    cam.apply(gl);

    // turn off lighting for 2d sprites
    gl.glDisable(GL10.GL_LIGHTING);

    gl.glPopMatrix();

    oCam.handleKeys();

}



}
  • 0
    Где вы рисуете «небесную сцену»? Это должно контролироваться буфером глубины, но мне не ясно, какова глубина вашего фона.
  • 0
    @Tim Сцена неба Тим называется здесь "стена" ... я не думаю, что я установил глубину? как мне установить это для стены?
Теги:
android-emulator
libgdx

1 ответ

0
Лучший ответ

Глубина просто означает "расстояние от камеры".

Я не эксперт по libgdx, но похоже, что он использует плоскость XZ для рисования мира, и он рассматривает камеру как на оси "Y", глядя вниз.

Если это так (пожалуйста, поправьте меня, если я ошибаюсь), тогда вам нужны облака, чтобы значение Y больше (ближе к камере), чем ваш фон.

Попробуйте установить положение стены Y на что-то вроде "-1", а облако на что-то вроде "0" и посмотрите, работает ли это. Вы можете сложить другие объекты, отрегулировав глубину.

  • 0
    Хм, поэтому я изменил cloud.setPos (1, 1f, 5); в cloud.setPos (1, 0f, 5); и wall.sprite.setPosition (GRIDSIZE.x, 1, 8); to wall.sprite.setPosition (GRIDSIZE.x, -1, 8); однако, это заставляет стену появляться ниже облака. Любые другие предложения? Спасибо за ответ
  • 0
    @BlueMonster На какой оси вы рисуете? XY? XZ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню