0

私は LWJGL パッケージを使用しており、基本的なシーンを作成して形状 (テクスチャの有無にかかわらず) を作成し、カスタムの「カメラ」オブジェクトを移動して回転させ、それに応じてシーンをレンダリングすることができます。しかし、影を作るとなると途方にくれます。

影を作成するための基本的なアルゴリズムを考えることができます。
1) 影のようにカメラのビューからシーンをレンダリングします。
2) ライトのビューからシーンをレンダリングし、シーンの可視部分を照らします (光源から遠ざかるにつれてシーンが暗くなる可能性がありますか?)。
3) カメラの視点からシーンを再レンダリングします。

ただし、OpenGL (特に LWJGL) の特定のメソッドはわかりません。このトピックに関する調査の結果、ジオメトリのすべての点と平面を必要とするか、自分のプロジェクトでは機能しないように見える部分的なコードのみを含むチュートリアルにしか遭遇しませんでした。

私はこれについて正しく考えていますか?もしそうなら、モデルの可視部分をシェーディングする(または何か他のことをする)ために使用する必要がある方法は何ですか?

4

2 に答える 2

1

これまで説明してきたように、最も簡単な方法は、ライトの視点からシーンをレンダリングすることです。深度マップの内容をシャドウマップテクスチャとして保存します。各深度は光源に最も近いものです。次に、シーンを再度レンダリングし、ライトの位置に相対的な「ワールド」空間で各フラグメントのテクスチャ座標を計算します。値をシャドウマップと比較します。値が大きい場合、このフラグメントはシャドウされています。

何年も前に、これを実証するためにいくつかの古い (シェーダー前の) OpenGL コードを書きました。GLUT は C で書かれていますが、すべての OpenGL ビットは LWJGL または JOGL で 1:1 に相当します。 http://cs.anu.edu.au/~hugh.fisher/3dstuff/shadows.tar

これを最新のシェーダーに変換することは難しくありません。

お役に立てれば。

于 2012-07-02T06:10:34.910 に答える
0

実装して理解するには、レイ トレース シャドウと言えます。基本的には、地面からレイをキャストし、テクスチャの各ピクセルに対して何かに当たるかどうかをチェックします。しかし、それは狂ったようにパフォーマンスを殺します。したがって、本当に必要な場合は、レイの計算を一度実行してテクスチャに保存し、レベル/シーンの開始時にロードすることができます。これはまったく動的ではありませんが、機能します。

于 2015-11-18T13:10:15.607 に答える