数理設計研究所トップページ  記述責任者:矢澤

VRMLの実験
  研究・設計 数理設計研究所  矢澤 正人
概略説明
 MAD3DのデータをVRMLに変換するソフト作成のための研究。

実現したいこと

  • 点群データの表示
  • 等高線群の表示
  • TIN群の表示
  • スケールの同時表示
  • 見栄えのする色、光源、テクスチャの設定
  • デジカメ画像との合成
  • 衝突の制御
  • 複数データの同時表示。データごとに色を変えるとか

判っている問題点

 デフォルトでは座標(0,0,0)を注目点としているが、データによってはなんの画像も見えないことがある。
 データ変換時にうまく表示できる視点位置を設定するか、データ位置をオフセットしておくなどする必要がある。

参考文献

 「VRML2 動く3Dグラフィックス」中山 茂 技報堂出版
 1997年の本。やや古く、ネットスケープベースのせいかサンプルがちゃんと見えないことが多い。

プラグイン

インターネットエクスプローラ用VRMLプラグイン
Cosmo Player 2.1.1(3.3MB) cosmo_win95nt_eng.exe

 各自、インストールして操縦に慣れておく必要があるだろう。

サンプルデータ

高度化センターロビー(5.9MB) floor.wrl

 もとデータが左手系、VRMLは右手系なのでX軸が反転してしまっている。

点データのサンプル vr2-3-31.wrl(1KB) point.wrl

 色情報にバグがあり点が見えない?

世増の正面、左半分(170KB) yoma.wrl


ホルンフェルス(387KB) horu.wrl

ファイル名

VRMLデータの拡張子は 「wrl」。worldの略らしい。
テキストで記述するが、バイナリ形式のものもある。

ヘッダ

ファイル先頭行に次のヘッダを入れる。
#VRML V2.0 utf8

コメント

半角の「#」以降、行末までがコメントとなる。

点の描画

次のように書くのが基本。
各点のX,Y,Zをスペースで区切り、各データをカンマで区切る。

Shape {
 geometry PointSet {
  coord Coordinate {
   point [
    1 1 0,
    -1 1 0,
    -1 -1 0,
    1 -1 0,
    0 0 1 ,
   ]
  }
 }
}

ポリラインの描画

 まず「point」で、ラインの頂点をすべて指定してしまう。指定した順に0から始まるインデックス番号が割り当てられる。
 次に、「coorIndex」で点集合のうちのどの点からどの点へ線を書くのかをインデックスで指定する。1本のラインはいくつ点を通過してもよく、-1で終端する。
 

Shape {
 geometry IndexedLineSet {
  coord Coordinate {
   point [
    0 0 0,
    1 1 1,
    2 1 1,
   ]
  }
  coordIndex [
   0, 1, -1,
   2, 3, -1,
  ]
 }
}

等高線データをVRML化するために必要な情報

頂点データ

 等高線データのすべての頂点の3次元座標。
 書式は、x、y、zをスペースで区切り、zの次はカンマと改行。
 値は単精度実数。
 各頂点データには、0から始まるインデックス番号が自動的に付加される。
例)
x0 y0 z0,
x1 y1 z1,
x2 y2 z2.

ラインデータ

 通過する頂点をラインの端から端までインデックス番号で指定し、-1で1本のラインを終端する。
 書式は、インデックス番号,インデックス番号,インデックス番号,・・・・-1,。
 値は32ビット整数。

0, 1, 2, 3, 4, 5, -1.
0, 10, 1, 10, 2, 15.-1,
11, 12, 13, 14, 15, 16, -1,

TINデータをVRML化するために必要な情報

 ラインと同じように、点群を登録してから面の構成をインデックス番号で指示してやればいい。
 ただし、シェーディングしないと何を表示してるのかさっぱりわからないので、別途シェーディングの書式を盛り込む必要がある。
Shape {
 geometry IndexedFaceSet {
  coord Coordinate {
   point [
    1 1 0,
    -1 1 0,
    -1 -1 0,
   ]
  }
  coordIndex [ 0, 1, 2, -1]
 }
}

..end