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();

}



}
4

1 に答える 1

0

深度とは、「カメラからの距離」を意味します。

私はlibgdxの専門家ではありませんが、XZ平面を使用して世界を描画しているように見え、カメラを「Y」軸が下を向くように扱っているようです。

その場合 (私が間違っている場合は訂正してください)、雲の Y 値が背景よりも大きい (カメラに近い) 必要があります。

壁の Y 位置を「-1」などに設定し、雲を「0」などに設定してみて、それが機能するかどうかを確認してください。深さを調整することで、他のオブジェクトを重ねることもできます。

于 2012-06-24T16:50:37.140 に答える