水の法線ベクトルから水の流れ方向ベクトルを取得する


8

私はゲームの水の重要な詳細の開発に行き詰まりました。

水の典型的な3Dの世界が重力に向かう傾向がg=(0,-1,0)あり、水面の法線があるとn=(x,y,z)考えると、それに基づいて水の流れ方向ベクトルをどのように計算できますか?

例として、このうまくできていないグラフを考えてください(ただし2Dで)

水流グラフ

更新:非常に単純化された水面を検討しています(平面のみ:波紋、波、圧力などはありません)。それらのいずれかを適用する必要がある場合、答えは通常よりも多くの要因に依存します。

回答:


13

それを行う1つの方法は、90°の角度が必要だと考えると、法線と重力の外積を見つけ、それを正規化し、それを再び法線と交差させることです。

ダイアグラムでは、最初のクロスは画面を指すベクトルを生成し、2番目のクロスはフローベクトルを生成します。

クロス積を使用することの興味深い副次的な影響は、法線ベクトルが垂直から離れるほどフローベクトルが長くなることです。これは、フロー速度に使用できますか?

これは、右手座標系を使用していることを前提としています。システムが左手である場合、中間ベクトルは代わりに画面の外を指していますが、同じ結果が得られます。


ええ、それは素晴らしいですね。説明するとそれはとてもシンプルに見えますが、それを実行するためのさまざまな(間違った)方法について30分ほど考えました。ありがとう!
2016年

これは、通常、流れの方向と考えるものにリモートに似たものを生成しません。マップを横切って流れる川の表面法線がどうなるか、そして東から西へ、そして西から東へ流れる川でそれらがどのように異なるのかを検討する理由を見てみましょう(つまり、そうではありません)。
Jack Aidley 2016年

1
法線と重力が(反)平行である場合はどうなりますか?私は仕方がないのですが、この答えには意味がありません。@JackAidleyが言ったように、法線が与えられると、無限に多くの可能な流れの方向があります。
マーガレットブルーム

1
質問で提示された簡略化されたモデルを考えると、この答えは彼らが探していたベクトルを生み出すと信じています。@Margaretベクターは、(抗)すなわち池/湖、水の平坦な本体で予想流されるであろう(0,0,0)フローベクトルがあろう次いで平行である場合
キングピン

@KingPin:川も平坦な水域であり、ほとんどの湖は川に流れ込みます。
Jack Aidley

1

表面法線から水の流れの方向を決定することはできません。追加のデータを保存する必要があります。

川を見るための簡単な旅行はこれをあなたに納得させるのに十分でなければなりません。表面の法線の違いは、表面の波打つことを反映しているだけで、水の塊は同じ方向に流れ続けます。しかし、根本的な理由は、法線が平面を定義し、流れのベクトルが必要だからです。あなたのベクトルは水の動きではなく表面の形状についてです。


1
確かに、あなたは正しいです。私は非常に単純化された水体(波紋、波、圧力などがない)だけを検討していましたが、実際には、この計算はそれほど単純ではありません。これらの詳細を明確にするために質問を更新します。ご協力ありがとうございます。
2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.