水面のシミュレーション
昨日のたわごとで、PS2の映像を見て水の表現が甘い、全然技術力不足だ。とのたまった俺だが、やはりプログラマなら口で言うだけで何もしないというのは男じゃないというわけで、サンプルを書いてみた。 というようなかっこいいことを言ってみたが、それはウソで、朝起きたらNEKOさんのホームページに水のサンプルプログラムがアップロードされていた。さっそく、対抗して俺も作ってみた。久しぶりにDirectXのプログラムを書いた。苦労したのは、スペキュラをONにしたかったが、全然ONにならなくて困った。結局、点光源を置いていたせいだった(点光源だとスペキュラがかからないなんて、どこにも書いてないぞ(たぶん))。あと環境マッピングの式を考えるのに意外と時間がかかった。何通りも解を求める方法が思い付いたが、高速な式があるはずだと思ってずっと悩んでいた。最終的に、考えた中で最も早そうな式が以下。
視線ベクトルの逆向き:V
法線ベクトル:N
反射のベクトル:VrVr = 2(V・N)N - V
まだ、極座標→テクスチャ座標の変換にバグがあり、テクスチャの継ぎ目にゴミが残っている。ちょっと直すのがややこしい。
あと、全反射のみ&不透明なので、水銀のよう。屈折と水底は、必要か。あぁ、このポリゴンの密度で水平線まで埋めたい。。
ソースが欲しい方はkamiyan2@gmail.comまで。