雑種のポメラニアン

フリープログラマーの日記とか人生観とか綴るよ

GLSceneで使える、地形データの作り方 #glscene

しばらくFireMonkeyをやっていたが
結局FireMonkeyは3Dのユーザーインターフェイスのアプリを作るためのものであって
3D動画アプリを作るのには向かないらしい事が分かったのと
GLSceneのリポジトリSubVersionに移ったのに気付いたので
GLSceneに戻ることにする。

GLSceneで地形を描く場合、TerrainRendererを使うのが普通なのだが
はっきり言って実用にならないくらい重いことが昨日分かったので
違う方法を模索してみた。

<最初の状態>

この宙に浮かんだ木を接地させる。

地形データの作成にはBryceを使う。
起動すると左上に地形ボタンがあるので仮の地形を設置する。
設置した地形を選ぶと右に小さなコントロールボタンが現れるので「E」ボタンを押す。

ElevationタブをおしてFractalの右の▼ボタンでフラクタルの種類を選択する。
今回はRound Hillsを選んだ。
Newの左の丸いボタンを押す。
イメージが真っ黒になるが、Fractalの左の丸いボタンを左右にドラッグすると
ぼんやりイメージが浮き上がってくる。
黒い部分ほど低く、白い部分ほど高い。調節する。

地形が気に入らなかった場合
Newからやり直すとRandomに地形データを描いてくれるので
気に入る地形になるまでやり直す。

イメージの右上の▼ボタンでExportする。今回は3DSにした。
これで地形データは完成。


Delphiを起動してActorを設置する。
FormCreate時に

ActorTerrain.LoadFromFile('Terrain.3ds');

などとして先ほどExportした地形データを読み込むようにする。

このままだと地形を壁に貼ったような状態になってしまうので
上ベクトルを変更する。
ActorTerrainのUp.zプロパティを1に、Up.yを0に設定する。
とりあえず起動して地形データの位置と大きさを確認する。
自分が理想とする位置(Position)とサイズ(Scale)になるように
プロパティをセットしては起動して確認しつつ調節する。

<地形データを読み込んだ状態>

カッコ悪いのでテクスチャを貼ってみる。
FormCreate時に

GLMaterialLibrary.LibMaterialByName('Ground').Material.Texture.Image.LoadFromFile('forest.jpg');

などとしてテクスチャを読み込む。
ActorTerrainのMaterialと関連付ける。

<テクスチャを貼った状態>

<鳥瞰図>


いかがでしょう?かなり地形っぽいと思います。
っていうか私のテクではこの辺が限界。

Bryceを使うとかなり手軽に地形を作れることがお分かり頂けたでしょうか。
また続き書きます(o・・o)/~