我能否在libGDX中使用PerspectiveCamera渲染SpriteBatch?

8

我能否使用透视相机来渲染我的精灵批次?

所有我的精灵(这些使用相同纹理加载的)看起来大小相同,但是我希望相机位于屏幕底部某个高度,这样那些靠近屏幕顶部的精灵看起来更小。现在它看起来像左边的那张图片,但是我希望它看起来像右边的那张图片:enter image description here

1个回答

8

是的,尽管您可能需要稍微调整/缩放您的坐标(您可以使用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 () {
    }
}

谢谢,非常好用。但是我的圆形精灵以前看起来非常平滑,现在在周长处看起来很锯齿状?另外,我从这里使用的触摸板http://www.bigerstaff.com/libgdx-touchpad-example/显示出来了,但我无法使用它,我的意思是旋钮不会移动,因此我无法从中获得任何输入。 - user494461
为什么这个透视相机不会改变舞台上的演员触摸板?我对普通对象和触摸板使用相同的SpriteBatch,但只有普通对象看起来像我想要的那样。 - user494461
2
默认情况下,stage使用正交相机,您可以使用stage.setCamera(...)更改相机。此外,stage使用camera.unproject将屏幕转换为舞台坐标,在其中它假定z=0。这可能对您不起作用,因此您可能需要扩展Stage并覆盖screenToStageCoordinates。为了获得更好(平滑)的渲染效果,请尝试更改纹理的minFilter/magFilter。我相信默认情况下是最近的,尝试将其设置为线性的。简而言之,Stage不适用于使用PerspectiveCamera,我不建议这样做。 - Xoppa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接