DirectXにおける水面の鏡面反射
Posted: 2014年9月07日(日) 06:45
DirectXを用いてゲームを作成している者です。
今回、船舶の水面への反射を再現しようと思い様々な文献を調べたところ、1つの方法として
「水面の平面方程式を取得し、D3DXMatrixReflect関数で水面に対して反転させる行列を得て、それを掛けて描画することにより水面に映っているように見える」
というものを発見しました。また、ステンシルバッファを用いて描画範囲を指定することで、水面にのみ反射させる方法もわかりました。
しかし実際に実装してみたところ、船舶の吃水より下の部分が、水面から浮き出たように描画されてしまいます。特に船舶が傾いて沈没する際は、鏡像が大きく水面から飛び出しています。
これを避け、「水面を基準として反転したモデルを描画」するのではなく、「水面という平面に鏡像を描画」するには、どのような方法があるのでしょうか。
要は、吃水より下の部分の鏡像が水面から飛び出さないような方法です。
問題解決にご協力いただけると幸いです。何卒回答よろしくお願いします。
なお、DirectXのバージョンは9.0cです。
今回、船舶の水面への反射を再現しようと思い様々な文献を調べたところ、1つの方法として
「水面の平面方程式を取得し、D3DXMatrixReflect関数で水面に対して反転させる行列を得て、それを掛けて描画することにより水面に映っているように見える」
というものを発見しました。また、ステンシルバッファを用いて描画範囲を指定することで、水面にのみ反射させる方法もわかりました。
しかし実際に実装してみたところ、船舶の吃水より下の部分が、水面から浮き出たように描画されてしまいます。特に船舶が傾いて沈没する際は、鏡像が大きく水面から飛び出しています。
これを避け、「水面を基準として反転したモデルを描画」するのではなく、「水面という平面に鏡像を描画」するには、どのような方法があるのでしょうか。
要は、吃水より下の部分の鏡像が水面から飛び出さないような方法です。
問題解決にご協力いただけると幸いです。何卒回答よろしくお願いします。
なお、DirectXのバージョンは9.0cです。