1

結果を結合したい 2 つの関数があります。

drawAmbient
drawDirectional

それらはそれぞれ個別にうまく機能し、アンビエント ライトのみ、またはディレクショナル ライトのみでシーンを描画します。アンビエント ライトとディレクショナル ライトの両方を表示したいのですが、少し問題があります。私はこれを試します:

[self drawAmbient];

glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_ONE, GL_ONE);

[self drawDirectional];

glDisable(GL_BLEND);

しかし、最初の結果しか表示されませんdraw。両方のドローコールのセットについて、同じ方法で深さを計算します。テクスチャにレンダリングしてテクスチャをブレンドすることはいつでもできますが、それは冗長に思えます。デフォルトのフレームバッファにレンダリングするときに照明を一緒に追加する方法はありますか?

4

2 に答える 2

3

両方のパスで同じ方法で深さを計算すると言います。もちろんこれは正しいですが、デフォルトの深度比較関数はGL_LESSであるため、深度は現在深度バッファーにあるものよりも小さくなることはないため、2 番目のパスでは実際には何もレンダリングされません。

したがって、2 番目のパスでは、深度テストを次のように変更します。

glDepthFunc(GL_EQUAL);

そして戻る

glDepthFunc(GL_LESS);

GL_LEQUALまたは、ランタイム全体で両方のケースをカバーするように設定することもできます。

于 2012-08-07T08:24:24.363 に答える
0

私の知る限り、照明をレンダリングしてレンダー ターゲットを分離し、それらを結合する必要があります。したがって、これらのターゲットにシーンをレンダリングします。

  • 照明なしのテクスチャ
  • まとめ 拡散照明 (環境色で塗りつぶし、すべての光源を加算的にレンダリング)
  • 鏡面照明の概要 (鏡面コンポーネントを使用する場合)

次に、テクスチャを組み合わせますfinal_color = textured * diffuse + specular

于 2012-08-07T08:16:09.873 に答える