1

水の波と屈折を使用して OpenGL アプリケーションを作成しようとしています。太陽から光線を放ち、次にカメラから光線を放ち、それらが交差する場所を特定するか、海底から開始して、どの方向に進む必要があるかを特定する必要があります。太陽またはカメラ。私はちょっと立ち往生しています.誰かがOpenGLレイキャスティングまたは高度なジオメトリのクラッシュコースのインポイントを教えてくれますか? 海底を一定の深さにしたくないし、水の波を単純な正弦波にしたくありません。

4

3 に答える 3

3

まず最初に: 達成しようとしている効果はOpenGLを使用して実装できますが、それは OpenGL の機能はありません。OpenGL 自体は、画面描画 API に対する洗練された三角形にすぎません。いくつかの入力データを取得し、OpenGL API を使用して、入力データに基づいて比較的単純なラスタライズ描画操作を実行するプログラムを作成しました。シェーダーはそれにいくらかのスペースを与えます。フラグメント シェーダーにレイトレーサーを実装できます。

つまり、意図したとおりの画像を生成するアルゴリズムを実装する必要があります。水については、水の中をのぞくような効果を得るために、ある種のレイトレーサーまたは偽の屈折方法である必要があります。コースティクスには、フル機能のフォトン マッパーが必要です。または、水面の 2 次導関数に基づくフェイク エフェクトが得意です。

驚くほど美しいインタラクティブな水をレンダリングする WebGL のデモがあります

このデモでは、真のレイトレーシング (水面、球体、およびプールがレイトレーシングされます) を使用します。コースティクスは、水面の高さマップの 2 次導関数の投影に基づく「フェイク コースティクス」効果です。

于 2011-10-06T13:39:14.270 に答える
1

これについては、OpenGL 固有のものは何もありません。

コースティクスについて話しているのですか?これは別の優れたGamasutra の記事です。

反射は通常、カメラをミラーの平面に反射させてテクスチャにレンダリングすることによって実現されます。歪みを適用してから、それを使用して水面にテクスチャを付けることができます。これは小さな波の場合にのみうまく機能します。

あなたがここで求めているのは、ごまかすためのたくさんの小さな方法です:-)

于 2011-10-06T13:02:23.077 に答える
0

技術的には、あなたが知覚するのは、光波/光子が表面で跳ね返り、媒質を通って伝播した結果だけです。「本当の取引」では、各光線がパスをたどって太陽から直接光を追跡する必要があります。

  • 水面にぶつかる
  • 屈折+反射、反射はカメラに入る(*)、屈折部分はさらに奥へ
  • 海底にぶつかる
  • 反射する
  • 下から水にぶつかる
  • 反射+屈折、屈折した部分が水面から出てカメラに当たる(※)、また反射して海底に行く、反射など。

(*) 実際には、ほとんどのレイはカメラを逃しますが、それは非常にコストがかかるため、これはチートです。

「赤」、「緑」、「青」の少なくとも 3 つの波長に対してこれを行います。それらのそれぞれは、異なる方法で屈折および反射します。3つを組み合わせると全体像が見えてきます。

次に、カメラに入った光線でテクスチャを作成し、OpenGL でオーバーレイします。

これは、コースティクスを超えた物理学への近似を与える、単純で単純で非常に計算コストの高い方法です。

于 2011-10-06T13:36:10.973 に答える