2014年12月7日日曜日

パッチワーク地形生成


というわけでTwitterにこういったpostをした。

書ききれないところと、ソースコードの構成の解説をしたい。

ソースコードはgithubにアップロードしておいた。

https://github.com/TakafumiFukuyo/LookLikeTerrain/tree/master/ChildrenDraw

簡単に説明すると、ランダムウォークする4つの点(増加可能)が、既存の描画部分を上書きするか否かをランダムに決定しつつ、手持ちのペンの色(ランダム)とサイズ(固定)でキャンバス内を塗りつぶしていく。

キャンバスがすべて塗りつぶされたら終了である。

点は初期位置と最大到達可能距離、そして上書きするかどうかの毎ループごとの決定に使う値(powerと呼んでいる)を持っている。

1ループごとに、ランダムな角度と到達可能距離以内の範囲を極座標系でえらび、そこまでまっすぐに塗りつぶす(塗りつぶし可能であれば)。

ペンの情報は単純にintである。デバッグ用の描画関数がintをColorに変換してTexture2Dに入力している。

キャンバスの1単位分の情報が0のとき塗りつぶしていないと判定している。

単純にランダムにキャンバスを塗っていくだけなので、きまぐれな子供のような動きと思って名付けたのだが、これがなかなか面白い模様を作ってくれるように思える。

動かすまでまさかそんなうまく行くわけないと思っていたのだが。

このあとこのキャンバスの情報から塊の情報を得て、その塊に対して特定のアルゴリズムで地形を作る。

最後に地形の境界をなだらかにしてやれば、およそMinecraft風の「役割付けされた地形」のようなものができるように思える。

…ところでMinecraftの実際の地形生成はどうなっているのだろうか…。企業秘密というやつだろうか…。

0 件のコメント:

コメントを投稿