1

我正在使用 LibGDX 开发一个手机游戏项目,该项目需要我将多个精灵组合在一起并将它们绘制成 FBO。基本上,我试图将一组精灵绘制到 1.0 alpha 的纹理上,这样我就可以以较低的不透明度将这些纹理绘制回 FBO,它看起来就像一个大块。我遇到的问题是我需要制作其中的几个,并且纹理最终会变得非常大,创建所有这些纹理并同时保留所有这些纹理听起来根本不是一个理想的解决方案。

相反,我正在尝试做的是从 FBO 本身中一次处理一个纹理,我认为这听起来是可行的,但我也不太清楚如何使其工作。为了将精灵组合到纹理上,就像我之前描述的那样,我相信我需要在单独的 FBO 中进行绘制并从中获取纹理。我不确定停止/启动 FBO 的效率如何,但即使只是作为一项测试,我也试图停止主 FBO,绘制用于制作这些纹理的临时纹理,然后重新启动主 FBO 并绘制它创建了纹理,但它似乎根本不起作用。我认为这是因为 FBO 不应该像那样来回切换,但我不确定还有什么可以尝试的。

我希望我的解释不会对 FBO 之间的所有切换和其他内容造成混淆,但基本上我只是在寻找从应用程序内创建多个纹理然后将这些纹理中的每一个单独绘制到 FBO 的最佳方法而无需一次将所有这些纹理保留在内存中。

这是我试图做的精简版。

public static void processImage() {
    mainFBO.begin();
    gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

    // draw in background texture(s)
    for(int i = 0; i < numberOfLayers; i++){
            mainFBO.end();
            Texture tempTexture = processLayer();
            mainFBO.begin();
            // draw tempTexture with desired settings

    }
    mainFBO.end();

    finalTexture = mainFBO.getColorBufferTexture();
}

public static Texture processLayer() {
    secondaryFBO.begin();
    // Draw all sprites for the necessary "layer"
    secondaryFBO.end();

    return secondaryFBO.getColorBufferTexture();
}
4

0 回答 0