はじめに
上記の続きになります!
今回はハイトマップを動的に生成するところから。
波の合成
ハイトマップを生成していくんですが、リアルテイストな波を表現するためには
"波の合成"
が必要になるためハイトマップを複数生成することにする
環状波と直進波
波のハイトマップを作成する際、
「環状波」 「直進波」
波が円形状に広がる 一定方向に並走して動く
の2種類のハイトマップを複数組み合わせていく。
合成結果がこんな感じ。
*動画だと目に悪そうだったので静止画
次にこのハイトマップを法線マップへ変換する
そして適用
動画では大小様々な環状波を80個ほど合成させてます。
直進波?いい奴だったよ。(直進波も適用させるとなんだか微妙な感じになったので消去)
余談
ハイトマップを毎フレーム複数生成するのがくっそ重かったので、
自分は、テクスチャサイズを64x64にする+OpenMPの機能を使用する
ってことをやって、なんとか対応しました。
なんかほかに良い方法あるのかなぁ。
波は尖る
で、ここまでsin波を活用して生成してきたんですが、ここで知らない単語登場
"トロコイド曲線"と"サイクロイド曲線"
なんだこれは。
この曲線を使用してハイトマップを生成すれば
よりリアルな波
を表現できるらしい。
自分なりに調べた結果、
「波を表現する際によく使われる曲線」
「直線上を円が転がるときに、円のある一点が描く軌跡」
・・・トロコイド曲線についてもうちょい勉強してきます...
トロコイド曲線メモ
・サイクロイド曲線はトロコイド曲線の1種
・媒介変数
時間とともに動く点P(x,y) の座標が時刻 tによって
x = t + 1, y = t2 − 2
と表せられるときの
tを媒介変数
この表わし方を媒介変数表示という
・サイクロイドの媒介変数表示
x=a(θ–sinθ)
y=a(1–cosθ)
いったん今日はここまで
次回はトロコイド曲線でのハイトマップ生成に変更するところからやります!
あと、頂点シェーダで実際に波を動かします!
開発環境
IDE:VisualStudio2022
使用言語:c/c++
使用ライブラリ:DirectXTex,DirectXMath etc.