Blenderで地形データを作る(その3)

続きです。
今回は読み込む地形をもっと大きなものにしてみます。地形データの作成は、Blenderでやりますが、頂点数が多いのでスカルプトモードで作成します。
まずBlenderでsubdivideで62分割したPlane(面が63×63、頂点が64×64)を用意します。
(Blenderを起動し、xで最初のCubeを削除、SHIFT+aで、Plane追加、s、0.5で半分に縮小、s、 63 ENTERで、63倍に拡大します。その後、EDITモードでSubdivideで62分割)
その後、sculptモードに変更し、symmetryのXをOFFして、作りたい地形になるように、Planeをマウスでドラッグしていきます。

作りたい地形になったら、エクスポートして64×64.objという名前で保存します。
10×10の時と同様に、以下のコマンドを実行し、頂点データの行だけフィルタリングして、すべてのデータを整数に変更します。

takk@deb9:~$ perl -naE 'if(shift@F eq "v"){@a=map{int$_}@F;say"@a"}' < 64x64.obj > 64x64.txt
takk@deb9:~$

行数は頂点の数と同じく、64×64の4096になっているはずですので、wcで確認します。

takk@deb9:~$ wc -l !$
wc -l 64x64.txt
4096 64x64.txt
takk@deb9:~$

合ってますね。次は、冒頭部分を確認しましょう。

takk@deb9:~$ head !$
head 64x64.txt
-31 0 31
31 0 31
-31 0 -31
31 0 -31
-31 0 -30
-31 0 -29
-31 0 -28
-31 0 -27
-31 0 -26
-31 0 -25
takk@deb9:~$

整数化されたX Y Z座標のデータとなってますね。
続いて、座標データの後に、ブロックデータも追加して、C言語で読み込むデータにします。

takk@deb9:~$ sed 's/$/ 1/' !$ > world_map.txt
sed 's/$/ 1/' 64x64.txt > world_map.txt
takk@deb9:~$

headコマンドで座標データに加えて、ブロックデータである1という数値も追加されてることを確認します。

takk@deb9:~$ head !$
head world_map.txt
-31 0 31 1
31 0 31 1
-31 0 -31 1
31 0 -31 1
-31 0 -30 1
-31 0 -29 1
-31 0 -28 1
-31 0 -27 1
-31 0 -26 1
-31 0 -25 1
takk@deb9:~$

あとは、このデータを使ってC言語+GLUTのプログラムを動かせば、このような画像が見られます。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA