1

ポイント ライト シャドウ マップ プログラムを使用していますが、複数のライト シナリオを制御する方法がわかりません。複数のライトをセットアップするにはどうすればよいですか? また、各ライトには独自の「深度テクスチャ」がありますか? もしそうなら、それらはシーンの最終的なレンダリングのためにどのように組み合わされますか (明らかに、すべてのライトが常にアクティブになるわけではありません)?

これについて考えると、シーン全体に使用されるものとは対照的に (特に、オープン ランドスケープとは対照的に、狭い場所のレベルで) 個別の (小さい) 深度キューブ マップを使用する方が論理的に思えますが、そのような実装システムは私を画面を見つめたままにします。

ありがとう。

4

1 に答える 1

1

やりたいことを実現する方法はたくさんあります。この方法は、正確なニーズによって異なります。OpenGL 2.1 以前を使用している場合は、複数の OpenGL ライトを有効にすることで、複数のライトをセットアップできます。

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glLightfv(GL_LIGHT0, <light 0 settings>);
glEnable(GL_LIGHT1);
glLightfv(GL_LIGHT1, <light 1 settings>);
...etc. with up to GL_MAX_LIGHTS lights

GL_MAX_LIGHTS よりも多くのライトが必要な場合、または OpenGL 3 以降を使用している場合は、たとえば、ライト データをユニフォームとしてシェーダー プログラムに渡す必要があります。

過去に影を扱ったときは、ライトごとに深度テクスチャを使用していました。

それらを組み合わせるには、通常、各フラグメントを各ライトに対してテストします。フラグメントがライトに見える (つまり、影にない) 場合は、ライトの影響を追加します。フラグメントが日陰にある (光に見えない) 場合、その光の影響を追加しません。

何百ものライトなどが必要な場合は、 Deferred Shadingを調べることもできます。( Deferred Shading に関するウィキペディアのエントリも参照してください。)

于 2013-02-17T16:26:43.877 に答える