プレイヤーが暗い廊下を歩かなければならないゲームを開発しています。キャラクターには懐中電灯があり、カメラは上にあります (GTA2 のように)。シェーディング アルゴリズムに問題があります。
光源(黄色の円)、壁の束(緑と青の線)、光のベクトル(赤い矢印)があります。
私たちが知っていること:
- 光源と線の間の距離。
- 行の長さ;
- 光ベクトル座標;
- 線が互いに交差していません。
- 線端の角度;
質問:
どの行が他の行の前にあるかをプログラムに認識させる方法は? たとえば、画像では、緑の線が青の線の前にあることがわかります。
ベクトルと両方の線のクロスポイントを見つけてから、光源とクロスポイントの間の長さを見つけ、それらを比較して最も近い線を見つけることができますが、プログラムの速度が低下します。さらに、青い線が光源に近づく (光源を少し上に移動すると) 状況が発生する可能性がありますが、それでもプログラムは青い壁が緑の線の後ろにあることを確認する必要があります。
たぶん、何らかの値ですべての行にマークを付けることができますか?
編集:また、式を使用してすべての線の値を作成しようとしました: a/alpha + b/beta
ここで:
a - 光源と線の最初の端点との間の距離
alpha - 線の最初の端点の角度
b - 間の距離光源と線
の 2 番目の端点 beta - 線の 2 番目の端点の
角度 角度の 1 つを元に戻す必要があります。
しかし、この式が機能するためには、定数が必要なようです。例:
a const/alpha + b const/beta
たぶん、この定数を見つけることで、すべての行に値を与えることができますか?