0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bablon.jsで地形データを表示したい2

Last updated at Posted at 2020-10-05

はじめに

bablon.jsで地形データを表示したい1で地形の点群データをbabylon.jsで点群データとして表示しました。その続きで、点群データを面として表示します。

リボン

面の作成は@dmystkさんがリボンを使っていたので、私もこれでやってみたい。複数個の点をつないで形状を作成します。

リボンで作る地形はこんなイメージ
yama.png
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.

で、前回作成した点群データでリボンを作ると、、!?
ribbon.png
もとはこれなのですが、、
pcs.png

点データの並び替え

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

格子内の平均値を出すイメージ
mesh3.png

いい感じになりました。
mesh.png
http://141-lab.com/babylon/qiita/ribbon/1_100.html

点群と比べてみて
http://141-lab.com/babylon/qiita/pcs/1_100.html

気になったこと

メッシュの大きさ

メッシュの大きさ(格子の大きさ)をどうするかで、形状が変わります。大きいと起伏が小さくなり、小さいとギザギザになり、いい感じになるポイントを調整しました。

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

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

列の方向

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

縦(y)方向に配列を作った場合
rev.png
http://141-lab.com/babylon/qiita/ribbon/rev.html

列の数

リボンの作成は2次元配列ですが、列の数が近いほうが綺麗になるようでした。この場合だと列数が20以下のものは削っています。これらも含めると、遠くをつながないといけないところがいびつになる。

列をすべて残した場合
2.png
http://141-lab.com/babylon/qiita/ribbon/2.html

今後

dynamic terrainという地形描画の仕組みもあり、これについても理解したい。
https://doc.babylonjs.com/extensions/dynamic_terrain

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?