3

これをopenGLで実装する方法について疑問に思っていました:

例

  1. 床と壁が平らな地図があります。ここにあるものはすべて 2D であり、3D ジオメトリはなく、マップを構成する 2D ポリゴンのみです。

  2. ポリゴンの頂点を使用して影を落とし、表示可能な領域を定義します。

  3. 影は視野を定義しますが、壁のあるセルは視界を遮るため、それらも暗くなります。影の上に壁を描くことはできますが、そうすると視野の外に壁が見えてしまいます。

シャドウ マッピングを使用してこの問題に取り組むよう提案されました。2D シーンを、最初に衝突するサーフェスまでの距離の深さを保持する 4 つの異なる 1D テクスチャにレンダリングする必要があります。問題は、2D シーンの投影を 1D テクスチャにレンダリングする方法がわからないことです。たとえば、 gluLookAt (x, y, 0.0, 0.0, x , y+1, 0.0, 0.0, 1.0);

上面図をレンダリングすると、結果は 2D のままです。また、すべての頂点が同じ平面にあるため、何もレンダリングされず、すべてのサーフェスがカメラに対して直交します。

これらの 2D から 1D への投影を行う方法に関するヒントやアイデアはありますか? 私はこのようなシナリオをグーグルで検索してきましたが、それらはすべて 3D 環境にあります。

4

1 に答える 1

0

シャドウ マッピングは、ディレクショナル ライトまたはスポットライトのいずれかを想定しており、ポイント ライトがあります。しかし、必要なのは床の影だけなので、たとえば床から 2 m の高さで下を向くスポット ライトとしてモデル化できます。すべての壁は少なくとも 2 メートルの高さでなければなりません。最初のシャドウ マッピング パスでは、床とすべての壁をシャドウ バッファにレンダリングできます。

ただし、シャドウ マッピングは使用せず、代わりにボリューム シャドウを使用します。3D から 2D に移行すると、3D ボリュームは 2D ポリゴンになります。

すべての壁が規則的なグリッド上にあると仮定すると、プレーヤーの位置 P から壁のすべての角までのビュー レイを計算できます。コーナーごとに、隣接する壁を保管し、プレイヤーとは反対側の壁をすべて無視します。次に、P から各コーナーに光線を投射し、光線を極座標に変換して、反時計回りなどの角度で並べ替えます。次に、この並べ替えられたリストを一掃して、シャドウ ポリゴンを構築します。

影のポリゴンは、このリストのコーナー ポイント、または a) 壁に平行な線と b) P とコーナーを通る線との交点のいずれかで構成されます。これを少し複雑にする唯一のことは、影を受ける壁を見つけなければならないことです。入力が非常に小さいので、おそらく力ずくで開始し (各壁に対してコーナーを確認します)、どれだけ遅いかを確認します。プレイヤーに面している壁だけが影を落とすことができることに注意してください。また、プレーヤーに最も近いポイントが表示されている必要がないことにも注意してください。

動きのあるキャラクターでとてもかっこよく見えるでしょう。

于 2013-05-14T07:39:03.837 に答える