部屋の中央に、立方体と1つの光源でいっぱいのメッシュ(球など)を配置します。「標準」(固定)関数のみを使用して、OpenGLですばやく簡単にシャドウキャストを作成するにはどうすればよいですか?注:結果には、立方体と球の影も含まれている必要があります。
3 に答える
球のシルエットを生成できる場合は、シャドウボリュームを使用できます。nVidiaハードウェアは、しばらくの間、 固定機能のシャドウマッピングもサポートしています。
シャドウボリュームには、非常に高いフィルレート要件という欠点があります。シャドウマップの方が優れている場合がありますが、追加のパスが必要です。
単一の平面に投影する場合は、オブジェクトを平面に投影する方が簡単な場合があります。
速くて簡単な方法はありません。さまざまなテクニックがたくさんあり、それぞれに長所と短所があります。私がgithubでホストしているプロジェクトを見ることができます。このプロジェクトでは、非常に単純なコードを使用して、シャドウボリューム手法(http://iuiz.github.com/VolumeShadow/)を使用してシャドウを作成しています。ただし、Javaで記述されていますが、他の言語に移植するのは難しいことではありません。
シャドウを作成する最も重要な方法は、いわゆる「シャドウマッピング」メソッドです。このメソッドでは、シーンを(光源にカメラを置き、各シャドウキャストオブジェクトに向けて)テクスチャにレンダリングします。そして2番目のテクニックはシャドウブールム法(Doom3で有名になりました)です。
StencilBuffersを使用する1つの方法を見つけました。しばらく混乱していたので、ついにアイデアが浮かびました。これが最も難しいのは、各光源をループしてすべてのシーンオブジェクトを投影することです。これはテクスチャシャドウよりもきれいに見え、ボリュームシャドウよりも速く動作します。こことここにいくつかのリソースがあり、行列の乗算ステップを理解するのに役立ちました(恐竜のデモを見ていたときに少し混乱しました)。私の場合、この方法は最も理解しやすく、使いやすい方法です。解決しなければならない唯一の問題は、乗算行列を計算する方法です。
この方法は、ここに示すようにテクスチャを使用して少し変更できますが。
みんなありがとう!=)