DirectXにおける水面の鏡面反射

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
hamu

DirectXにおける水面の鏡面反射

#1

投稿記事 by hamu » 11年前

DirectXを用いてゲームを作成している者です。

今回、船舶の水面への反射を再現しようと思い様々な文献を調べたところ、1つの方法として

「水面の平面方程式を取得し、D3DXMatrixReflect関数で水面に対して反転させる行列を得て、それを掛けて描画することにより水面に映っているように見える」

というものを発見しました。また、ステンシルバッファを用いて描画範囲を指定することで、水面にのみ反射させる方法もわかりました。

しかし実際に実装してみたところ、船舶の吃水より下の部分が、水面から浮き出たように描画されてしまいます。特に船舶が傾いて沈没する際は、鏡像が大きく水面から飛び出しています。

これを避け、「水面を基準として反転したモデルを描画」するのではなく、「水面という平面に鏡像を描画」するには、どのような方法があるのでしょうか。
要は、吃水より下の部分の鏡像が水面から飛び出さないような方法です。

問題解決にご協力いただけると幸いです。何卒回答よろしくお願いします。
なお、DirectXのバージョンは9.0cです。

sleep

Re: DirectXにおける水面の鏡面反射

#2

投稿記事 by sleep » 11年前

hamu さんが書きました: 船舶の吃水より下の部分が、水面から浮き出たように描画されてしまいます。特に船舶が傾いて沈没する際は、鏡像が大きく水面から飛び出しています。
求めているものと答えが違うかもしれませんが
SetClipPlaneで平面クリッピングしてあげれば水面より上は描画されないと思います。

■水面シミュレーション [2002.03.08]
http://homepage2.nifty.com/fluidmechanics/directx.htm

hamu

Re: DirectXにおける水面の鏡面反射

#3

投稿記事 by hamu » 11年前

ご回答ありがとうございます。
sleep さんが書きました: 求めているものと答えが違うかもしれませんが
SetClipPlaneで平面クリッピングしてあげれば水面より上は描画されないと思います。

■水面シミュレーション [2002.03.08]
http://homepage2.nifty.com/fluidmechanics/directx.htm
ご紹介いただいた関数を使用したところ、期待した通りの動作になりました。
ご協力感謝致します。

閉鎖

“C言語何でも質問掲示板” へ戻る