3

ゲームにフォグ エフェクトを作成したいのですが、OpenGL ES 2.0 を使用してフォグ エフェクトを作成する方法に関するチュートリアルが見つかりません。誰かがチュートリアルへのリンクを持っていて、説明やソースコードを提供できるなら、私は感謝します.

4

1 に答える 1

5

OpenGL ES 2.0 プログラミング ガイド (224 ページ) には、シェーダーを使用した固定機能フォグの複製に関するセクションがあります。ソース コードは、Google コード プロジェクト (MIT ライセンス) で入手できます。これは巨大な rendermonkey XML ファイルですが、そこに埋め込まれているシェーダー ソースは非常に単純です(ここに直接コピーしますが、それでよいかどうかはわかりません)。

アイデアは、特定のピクセルまでの距離をフォグ関数への入力として使用することです。その例では、頂点シェーダーで目から頂点までの距離を計算し、変数として渡すことで各フラグメントに補間された距離を提供します。

They then do a simple linear fog function. There's some minimum distance where there would be zero fog color, and some maximum distance where the output would be all fog color. You mix (linearly interpolate) the fog color and the fragment color by where the pixel distance falls between the max and the min.

As mentioned in the book, once you have that working, there's no reason to limit yourself to linear fog. You can easily make it exponential, dependent on other variables (e.g. distance to a floor, variable due to a texture lookup or noise functions), make god rays through it, etc.

あなたの質問からは、正確に何を求めているのか明確ではないため、本当に動的にしたい場合、それはまったく別の球技です (そして、得られる効果のための開発努力とパフォーマンスコストに常に価値があるとは限りません)。既存の WebGL コードについては、ソース コードのどこかにあるThree Dreams of Blackの読み込み画面のようなものを試すか、霧を実際に 3D 流体としてモデル化することで、よりシミュレーション ベースにすることができます。

于 2012-07-27T22:12:13.337 に答える