3

ここで簡単な背景を説明します。私は、Android ゲーム開発の最初の試みで LibGDX フレームワークを使い始めたところです。スプライトを配置して FrameBuffer クラスを使用してテクスチャを構築しようとしています。このテクスチャをレベルごとの動的/ランダム背景の一種として使用したいと考えています。

残念ながら、スプライトが FrameBuffer に追加されると、スプライトの下にあるものはすべて完全に上書きされるようです。一般的にはこれで問題ありませんが、これに使用するスプライトの多くには半透明のピクセルがあり、これらの透明なピクセルはその下の塗りつぶされたピクセルを上書きするため、ベースの背景色まで透けて見え、非常に不快な効果が生じます.

言い換えれば、複数のスプライトから 1 つのソリッド テクスチャを作成し、下のピクセルを完全に削除せずに (少なくとも上のピクセルが半透明の場合) 互いの上に重ねる最良の方法は何ですか?

これについてかなりの時間実験して検索したので、私は途方に暮れています。御時間ありがとうございます!

- - - 編集 - - -

以下は、スプライトを FBO に追加するために使用されるコードです。今のところ、テスト目的でランダムな場所に 1 つのスプライトを追加しているだけなので、非常に不足しています。リクエストに応じて喜んでコードを投稿しますが、この問題に取り組むために、セットアップ全体は現在非常に最小限です。

    m_fbo.begin();
    batch.begin();
    batch.setBlendFunction(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
    sprite.draw(batch);
    batch.end();
    m_fbo.end();
4

1 に答える 1

0

古い質問ですが、FBO初期化コードを貼り付けることはできますか?FBOにアルファチャネルが必要です。もう1つは、FBOはGLES 2.0の機能であるため、アルファテストはGLES 2.0で手動で実行する必要があるため、独自のシェーダーを使用することをお勧めします。

最後に、バッチでのブレンドを有効にしましたか?

batch.enableBlending();

トリックを行う必要があります。

于 2013-03-12T10:53:53.903 に答える