はじめに
bablon.jsで地形データを表示したい1で地形の点群データをbabylon.jsで点群データとして表示しました。その続きで、点群データを面として表示します。
リボン
面の作成は@dmystkさんがリボンを使っていたので、私もこれでやってみたい。複数個の点をつないで形状を作成します。
リボンで作る地形はこんなイメージ

babylon.jsリボンのドキュメント
https://doc.babylonjs.com/how_to/ribbon_tutorial
プログラムはこんな感じ。座標を2次元配列で生成して、MeshBuilder.CreateRibbonです。
// ribbon生成
var path1 = [
new BABYLON.Vector3(-1, 2, 0),
new BABYLON.Vector3(0, 2, 0),
new BABYLON.Vector3(1, 2, 0)
];
var path2 = [
new BABYLON.Vector3(-2, 1, 1),
new BABYLON.Vector3(-1, 1, 1),
new BABYLON.Vector3(0, 1, 1),
new BABYLON.Vector3(1, 1, 1)
];
var path3 = [
new BABYLON.Vector3(-1, 0, 0),
new BABYLON.Vector3(0, 0, 0),
new BABYLON.Vector3(1, 0, 0),
new BABYLON.Vector3(2, 0, 0)
];
var ribbon = BABYLON.MeshBuilder.CreateRibbon("ribbon", {pathArray: [path1, path2, path3]}, scene);
See the Pen babylon.js CreateRibbon by nobuyuki ishii (@nobuyuki-ishii) on CodePen.
で、前回作成した点群データでリボンを作ると、、!?

もとはこれなのですが、、

点データの並び替え
リボンの作成は2次元配列の座標値をパラメータとするのですが、設定した順に線を結びます。近い点が結ばれる並びになっていなかったようです。国土地理院とか見ていますと、1mメッシュなどといって、決められた大きさの格子ごとにデータを扱うやり方があります。格子の中の複数個の点は、座標値の平均をとって、1コに変換します。
いい感じになりました。

http://141-lab.com/babylon/qiita/ribbon/1_100.html
点群と比べてみて
http://141-lab.com/babylon/qiita/pcs/1_100.html
気になったこと
メッシュの大きさ
メッシュの大きさ(格子の大きさ)をどうするかで、形状が変わります。大きいと起伏が小さくなり、小さいとギザギザになり、いい感じになるポイントを調整しました。
メッシュサイズ大の場合

http://141-lab.com/babylon/qiita/ribbon/big.html
メッシュサイズ小の場合

http://141-lab.com/babylon/qiita/ribbon/small.html
列の方向
リボンの作成は2次元配列の座標値をパラメータとするのですが、設定した順に線を結びます。なので、縦(y)方向で配列を作るのと横(x)方向でデータを作るのとではできるものが異なる。この場合だと横(x)方向のデータにしたほうが綺麗でした。
縦(y)方向に配列を作った場合

http://141-lab.com/babylon/qiita/ribbon/rev.html
列の数
リボンの作成は2次元配列ですが、列の数が近いほうが綺麗になるようでした。この場合だと列数が20以下のものは削っています。これらも含めると、遠くをつながないといけないところがいびつになる。
列をすべて残した場合

http://141-lab.com/babylon/qiita/ribbon/2.html
今後
dynamic terrainという地形描画の仕組みもあり、これについても理解したい。
https://doc.babylonjs.com/extensions/dynamic_terrain
