2013-08-02 9 views
7

スプライトのバッチをレンダリングするためにパースペクティブカメラを使用できますか?libGDXのPerspectiveCameraを使用してSpriteBatchをレンダリングできますか?

私のスプライト(同じテクスチャを搭載しているもの)は同じサイズに見えますが、カメラの高さを画面の下側に配置したいので、画面の上部近くに配置されているスプライトが小さく見えます。右のように見えますが、右のようにしてください:enter image description here

答えて

7

はい、座標を少し調整する必要がありますが(spriteBatch.setTransformMatrix 1回の呼び出しでこれを行う)。小さな例があります:

public class SpriteBatch3DTest extends GdxTest { 
    PerspectiveCamera cam; 
    CameraInputController camController; 
    SpriteBatch spriteBatch; 
    Texture texture; 

    @Override 
    public void create() { 
     cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     cam.position.set(0f, 8f, 8f); 
     cam.lookAt(0,0,0); 
     cam.near = 0.1f; 
     cam.far = 300f; 
     cam.update(); 

     spriteBatch = new SpriteBatch(); 

     camController = new CameraInputController(cam); 
     Gdx.input.setInputProcessor(camController); 
     texture = new Texture(Gdx.files.internal("data/badlogic.jpg")); 
    } 

    @Override 
    public void render() { 
    camController.update(); 
    spriteBatch.setProjectionMatrix(cam.combined); 

    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    spriteBatch.begin(); 
    spriteBatch.draw(texture, -5f, -5f, 10f, 10f); 
    spriteBatch.end(); 
    } 

    @Override 
    public void dispose() { 
     spriteBatch.dispose(); 
     texture.dispose(); 
    } 

    public boolean needsGL20() { 
     return true; 
    } 

    public void resume() { 
    } 

    public void resize (int width, int height) { 
    } 

    public void pause() { 
    } 
} 
+0

ありがとうございます。しかし、私の円形スプライトは、円滑に見えるのに、円周上にギザギザが見えましたか?また私がここから使用していた私のタッチパッドhttp://www.bigerstaff.com/libgdx-touchpad-example/が表示されますが、私はそれを使用することはできません、私はノブの動きを意味しないので、私はそれから任意の入力を取得しないでください –

+0

なぜこのパースペクティブカメラはステージ上の俳優であるタッチパッドを変えないのですか?私は通常のオブジェクトとtouchapdのために同じSpriteBatchを使用しますが、通常のオブジェクトは好きなように見えます –

+2

デフォルトでステージはOthographicCameraを使用していますが、stage.setCamera(...);を使用してカメラを変更できます。また、stageはcamera.unprojectを使用して、画面をステージ座標に変換します。この座標では、z = 0とみなされます。これはうまくいかないかもしれませんので、おそらくStageを拡張してscreenToStageCoordinatesをオーバーライドする必要があります。より良い(滑らかな)レンダーを得るには、テクスチャのminFilter/magFilterを変更してみてください。私はそれがデフォルトで最も近いと信じて、それをリニアに設定してみてください。 Tl; dr Stageは、PerspectiveCameraでの使用のために設計されていないため、私はそれをお勧めしません。 – Xoppa

関連する問題