簡略化されたディファード シェーディングを実装しました (ポイント ライトの境界は計算しません)。ここで、g バッファーを埋めた後、コンピューティング ライティングにフル スクリーン クワッドを使用します。複数のライトを処理するために、第 2 段階でブレンディング ( glBlendFunc(GL_ONE, GL_ONE)) を使用します。次に、正しい結果を得るには、glClearColor の RGB 値を 0 に設定する必要があります。g-buffer を塗りつぶすとき、glClearColor は任意の色にすることができます (一部の色は、最終的な画像の背景色のみを変更する場合があります)。最終的な画像の背景色をどのように設定すればよいのでしょうか。これを行う 1 つの方法は、g バッファーを埋めるときに glClearColor(0,0,0) を使用し、フラグメント シェーダーで次の if ステートメントを使用することです。
if((normal.x == 0.0) && (normal.y == 0.0) && (normal.z == 0.0))
{
fragColor = vec4(1, 0, 0, 1); // here we can set a background color
}
else
{
fragColor = computeLighting(worldPos, normal, diffM, specM, specMS);
}
正常に動作しますが、if ステートメントによってパフォーマンスが低下する可能性があります。これは背景色を設定する唯一の方法ですか?