1

私は、いくつかのスプライトを組み合わせて FBO に描画する必要がある LibGDX を使用するモバイル ゲーム プロジェクトに取り組んでいます。基本的に、スプライトのグループをアルファ 1.0 のテクスチャに描画しようとしているので、それらのテクスチャをより低い不透明度で FBO に描画すると、1 つの大きなピースのように見えます。私が抱えている問題は、これらのいくつかを作成する必要があり、テクスチャが非常に大きくなる可能性があることです。これらのテクスチャをすべて作成して一度にすべてを保持することは、理想的な解決策とはまったく思えません。

私が代わりにやろうとしているのは、FBO 自体から一度に 1 つずつテクスチャを操作することです。これは実現可能だと思いますが、それを機能させる方法もわかりません。スプライトをテクスチャに結合するには、前述のように、別の 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