我在我的项目中使用了ortho camera和FitViewport。
在我的render()方法中,我创建了一个fremeBuffer来存储我的游戏的实际状态,然后创建一个缓冲区的像素图,最后我设置了一个新的着色器并使用该帧进行后处理:
//--- render frame to buffer
screenBuffer.begin();
camera.update();
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(img, 0, 0);
batch.end();
stage.draw();
//--- create pixmap from that buffer
pixmap = ScreenUtils.getFrameBufferPixmap(0, 0,screenBuffer.getWidth(), screenBuffer.getHeight());
batch.flush();
screenBuffer.end();
//--- create texture from pixmap
renderedScreenTexture = new Texture(pixmap);
//--- finally render frame with postprocess shader
camera.update();
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.setShader(monoShader);
batch.setProjectionMatrix(camera.combined);
batch.begin();
batch.draw(renderedScreenTexture, 0,0);
batch.draw(renderedScreenTexture, 0, 0, 640, 320, 0, 0, 640, 320, false, true);
batch.end();
在我的调整大小方法中,我有:
viewport.update(width, height);
camera.position.set(camera.viewportWidth / 2,camera.viewportHeight / 2, 0);
问题是在调整窗口大小后FitViewport doesen工作。 当我从渲染方法中删除创建frameBuffer时,FitViewport工作正常。 谁能告诉我我的代码或整个概念有什么问题?
答案 0 :(得分:1)
在绘制frameBuffer之前,您可能需要调用fitViewport.apply()
。
答案 1 :(得分:1)
试试这个:
// the viewPort you are using
FitViewport v = viewport;
// end your buffer with your viewPort's position and size
screenBuffer.end(v.getScreenX(),v.getScreenY(),
v.getScreenWidth(),v.getScreenHeight());