0

ゲーム自体にスプライトをオーバーレイして画面を暗くし、その上に明るいスプライトをオーバーレイしたいので、暗いスプライトのように、画面全体をオーバーレイする 1 つの黒いピクセルと、高レベルで白い別のスプライトが 1 つになります。暗くなるにつれて暗くなる、どうすればすべてを正しく描画してブレンドできるでしょうか?

レンダリングコードでこれまでに得たものは次のとおりです。

public void Render() {

          // seting up camera position
         //render game elements and background
     ....
         batcher.setColor(1, 1, 1, .25f); // set alpha to .25f so it wouldnt be
                                          //completely black
         batcher.draw(Assets.shadow, 0, 0, 15, 8f); // drawing the shadow over
                                                    //the whole world (15 x 8)
         batcher.draw(Assets.light, 4, 0, 8, 2.5f); //drawing the light sprite

     ....
          //finishing rendering
}

私も追加してみました

 batcher.setBlendFunction(GL20.GL_BLEND_SRC_ALPHA,
     GL20.GL_BLEND_DST_ALPHA);

そこで「乗算」効果を得ようとしましたが、うまくいきませんでしたbatcher.setcolor()

また、キャラクターとワールド レンダリングの後にライト レンダリングのコードを配置して、キャラクターにオーバーレイし、その色に影響を与えるようにしました (まあ、それは私が念頭に置いていたことでした..)

これはAssets.shadow: http://i.stack.imgur.com/kzXlI.png ここに画像の説明を入力 (文字通り 1 つの黒いピクセル.. わかりますか?)

assets.light: http://i.stack.imgur.com/mNANb.png ここに画像の説明を入力

それらの写真を拡大し、テクスチャ フィルターを線形に設定して、光の効果を得ます。

他に何か必要な場合は、教えてください。それを提供してください。

編集:ゲーム内での表示は次のとおりです。

光の中で:

ここに画像の説明を入力

影で:

ここに画像の説明を入力

4

2 に答える 2

0

推測ですが、ブレンド機能を使用する場合は、完全なアルファ (非透明) を持つ白いピクセルを使用してみてください。ブレンドを行うと、アルファは下にあるピクセルの明るさ/暗さを変更するためです。

つまり、黒 = 変化なし - 白 = 完全な変化

于 2014-04-22T14:48:10.353 に答える
0

これはあなたが探しているものかもしれません。シェーダーなしでそれを行うこともできます。シーンを描画し、ダークブルーの透明な色で「オーバードロー」して暗さを追加するだけです。光スポットが必要な場合は、FrameBuffers を使用できます。この質問を見てください。

于 2014-01-23T14:41:07.907 に答える