在 Scene2D 中使用帧缓冲区

问题描述 投票:0回答:0

我在使用绘制方法使用 FrameBuffer 的自定义 Scene2D actor 时遇到了一些问题。最初的想法是使用一个着色器绘制到 FrameBuffer,然后使用另一个着色器将 FrameBuffer 的内容绘制到屏幕,但这必须等待。我现在遇到的问题是如何让 FrameBuffer 的内容正确填充我期望 Actor 在屏幕上占据的空间。经过多次实验,我得到了一些似乎有效的东西,但我仍然不明白为什么它有效。

绘制方法如下:

@Override
public void draw(Batch batch, float parentAlpha) {
    
    batch.end();
    buffer.begin();
    ScreenUtils.clear(1,0,0,1);
    batch.begin();
    batch.draw(texture,0,0,640,640); // This is the window size!
    batch.end();
    buffer.end();
    batch.begin();
    batch.draw(buffer.getColorBufferTexture(),
               getX(),
               getY(),
               getWidth(),
               getHeight(),
               0,
               0,
               buffer.getColorBufferTexture().getWidth(),
               buffer.getColorBufferTexture().getHeight(),
               false,
               true);

}

我知道 FrameBuffer 使用像素坐标,而不是 Scene2D 用于 Actor 位置和大小的“世界”坐标。我不明白的是,为什么如果以小于实际窗口大小的任何值将纹理渲染到 FrameBuffer,则来自 FrameBuffer 的颜色缓冲区纹理将以小于屏幕上 Actor 的大小进行渲染。

我想我正在寻找以下问题的答案。

(1) FrameBuffer 的大小应该是多少?

我最初的想法是它应该是我打算绘制的纹理的大小。

(2) 当我绘制到 FrameBuffer 时,我应该使用不同的投影矩阵吗?

我对正确解决方案的最佳猜测是,当我绘制到 FrameBuffer 时,我应该更改 SpriteBatch 的投影矩阵,以考虑到 FrameBuffer 与应用程序窗口大小不同的事实。不幸的是,我无法在网上找到有用的示例或教程。

libgdx framebuffer scene2d
© www.soinside.com 2019 - 2024. All rights reserved.