2013-08-02 3 views
7

Можно ли использовать перспективную камеру для рендеринга моей спрайтной партии?Могу ли я сделать SpriteBatch с помощью PerspectiveCamera в libGDX?

Все мои спрайты (те, которые загружены одинаковой текстурой) выглядят одинакового размера, но я хочу, чтобы камера была размещена внизу экрана на некоторой высоте, поэтому те спрайты, которые расположены ближе к верхней части экрана, выглядят меньше. Прямо сейчас он похож на тот, что слева, но я хочу, чтобы он выглядел как справа: enter image description here

ответ

7

Да, хотя вам, вероятно, нужно немного скорректировать/масштабировать координаты (вы можете использовать spriteBatch.setTransformMatrix сделать это за один звонок). Вот небольшой пример:

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

почему эта камера перспективы не изменяет тачпад, который является актером на сцене? Я использую тот же SpriteBatch для обычного объекта и touchapd, но только обычные объекты выглядят так, как я хочу –

+2

По умолчанию этап использует OthographicCamera, вы можете изменить камеру с помощью stage.setCamera (...) ;. Кроме того, на сцене используется метод camera.unproject для перевода экрана в координаты сцены, в котором он принимает z = 0. Это может не сработать для вас, поэтому вы, вероятно, захотите расширить Stage и переопределить screenToStageCoordinates. Чтобы получить лучший (плавный) рендер, попробуйте изменить minFilter/magFilter вашей текстуры. Я считаю, что это Nearest по умолчанию, попробуйте установить его на Linear. Tl; dr Stage не предназначен для использования с PerspectiveCamera, я бы не рекомендовал его. – Xoppa

Смежные вопросы