2010-11-21 4 views
6

部屋の中心にキューブと光源が1つあるメッシュ(ex。sphere)を作ってみましょう。どのようにしてを高速で簡単に作ることができますか? "標準"(固定)関数のみを使って、OpenGLでシャドウキャスティングをしますか?注:結果には、キューブと球のシャドウも含まれている必要があります。OpenGLでシーンに依存しないシャドウを簡単に作成する方法

+1

BTW-「標準機能」は実際にあなたが探している表現ではありません。 「固定機能」はそれに似ていますが、シェイダーは今では数年前から「標準」になっています。 – Kos

+0

うん、私は私の質問を構成するときにこれを呼び出す方法を考えていた。ありがとう! =) – shybovycha

答えて

4

球のシルエットを生成できる場合は、shadow volumesを使用できます。 nVidiaハードウェアも固定機能shadow mappingを公平にサポートしています。

シャドウボリュームには、非常に高い塗りつぶしの要件があるという欠点があります。陰影マップはより良いことができますが、余分なパスが必要です。

1台の平面に投影する場合は、単にproject the object on to a planeにする方が簡単です。

+0

ポイントは普遍的なアルゴリズムを使用することです - 球のシルエットだけではない=)しかし、とにかく感謝! =) – shybovycha

+0

申し訳ありませんが、もう少し2番目のリンクをクリックしていない...はい、あなたはそうだった、シャドウマッピングは十分であり、私は自分でそれを発見しました(愚かな私)=) – shybovycha

+0

@shybovycha: ) – Goz

2

速くて簡単な方法はありません。それぞれに独自の賛否両論がある、異質の技術がたくさんあります。シャドウボリュームテクニック(http://iuiz.github.com/VolumeShadow/)を使って、非常に簡単なコードを使ってシャドウを作成するgithubでホストしているプロジェクトを見ることができます。しかし、それはJavaで書かれていますが、他の言語に移植するのは難しいことではありません。

シャドウを作成する最も重要な方法は、シャドウマッピングメソッドと呼ばれ、光源(シャドウキャストオブジェクトの光源にあるカメラで)をテクスチャにレンダリングします。 2番目のテクニックは、シャドウ・ボウルメ(Doom3で有名)メソッドです。

+0

ありがとうございます、しかし私はすでにアイデアを得ました=)射影影は十分である=) – shybovycha

1

私はStencilBuffersを使用して1つの方法を見つけました。ちょっと混乱して、私はついにアイデアを得ました。これは、最も難しいのが各光源をループしてすべてのシーンオブジェクトを投影するということです。これは、テクスチャのシャドーイングよりも美しく見え、ボリュメトリックなシャドウよりも速く動作します。 herehereはいくつかのリソースであり、マトリックスの乗算のステップを理解するのに役立ちました(これは、私がディノのデモを見ているときに私を少し混乱させました)。私の場合、この方法は最も理解しやすく、使いやすいです。解くべき唯一の問題は、乗法行列の計算方法です。

この方法は、テクスチャas shown hereを使用して少し変更することができますが、

ありがとうございました! =)