![[PukiWiki] [PukiWiki]](image/Concept_logo.jpg) 
 Tutorial?
※このチュートリアルはv2.1.0以降対応です。
ここでは形状ファイル(x3d)を作成してSIGVerseに登場させる方法を説明します。
まず静止物体の形状ファイルを作成します。形状ファイルはノードとフィールドからなります。SIGVerseで形状ファイルを読み込むためにGroup, Transform, IndexFaceSetなどのノードを用いて記述します。
ここでは簡単な立方体の形状ファイルを作成します。
サーバ側で box.wrl
#VRML V2.0 utf8 CosmoWorlds V1.0
# Need this line to parse this file with Xj3D
PROFILE Interactive
Group
 {
 children
 [
  Transform
  {
   children Shape
    {
     appearance Appearance
     {
      texture ImageTexture
      {
 
      #使用するテキスチャを指定します。
       url  "tumiki_moku.jpg"
       repeatS TRUE
       repeatT TRUE
      }
     }
    geometry IndexedFaceSet
   {
    convex FALSE
    solid FALSE
    coord DEF Coaster_c01GeoPoints Coordinate
    {
    #面を構成する点の位置
     point [
      -5.0 0.0 -5.0,
      5.0 0.0 -5.0,
      5.0 0.0 5.0,
      -5.0 0.0 5.0,
      -5.0 10.0 -5.0,
      5.0 10.0 -5.0,
      5.0 10.0 5.0,
      -5.0 10.0 5.0
     ]
    }
 
    #面を構成する頂点の座標(上記の点の通し番号)
    coordIndex [
     0 3 2 1 -1, 
     4 5 6 7 -1, 
     4 0 1 5 -1, 
     5 1 2 6 -1, 
     6 2 3 7 -1, 
     7 3 0 4 -1
    ]
    texCoord TextureCoordinate
    {
 
     #テキスチャの点の座標
     point [
      0.000000 0.000000
      0.000000 1.000000
      1.000000 1.000000
      1.000000 0.000000
     ]
    }
    #面に張り付けるテキスチャの座標
    texCoordIndex [
     0 1 2 3  -1,
     0 1 2 3  -1,
     0 1 2 3  -1,
     0 1 2 3  -1,
     0 1 2 3  -1,
     0 1 2 3  -1,
    ]
   }
   }
  }
 ]
}
x3dファイルの場合はこちら
#ref(): File not found: "box.x3d" at page "自作の形状ファイルの読み込み"
ここではIndexedFaceSetノードで静止物体の形状を記述します。これらのノードは必ずGroupノード、Transformノードの中に記述してください。
形状ファイルの色づけはテキスチャを用います。 ここでは立方体に張り付ける画像"tumiki_moku.jpg"を指定しました。これは木の木目画像です。 ここで指定した素材はSIGViewerのインストール場所、デフォルトでは
C:\Program Files\SIGViewer_<version>\SIGViewer\media\materials\textures
に準備されています。他にもさまざまな素材が用意されています。また、自分の好きなテクスチャ素材を取得して、ここに保存しておけばそれを読み込むこともできます。
それでは上で作成した形状ファイルを保存します。SIGViewerの実行ファイルがある場所、デフォルトでは
C:\Program Files\SIGViewer_<version>\SIGViewer\media\release
に保存します。
次はサーバ側で設定を行います。
上で作成したbox.wrlをサーバ側の
/home/<username>/sigverse-<version>/share/sigverse/data/shape
にコピーします。
エンティティの設定ファイルを作成します。
$ cd ~/sigverse-<version>/share/sigverse/data/xml $ emacs seBox.xml
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <define-class inherit="Entity.xml" name="box"> <body filename="dummy-body.xml"/> <!--形状ファイルの指定 --> <x3d> <filename>box.wrl</filename> </x3d> </define-class>
x3dファイルの場合はbox.wrl→box.x3dに指定します。 上で指定したdummy-body.xmlはサーバ側ではエンティティ用にすでに用意されています。
作成したエンティティにコントローラを取りつけて自律動作させたい場合は2行目を修正します。
<define-class inherit="Entity.xml" name="box">
↓
<define-class inherit="Agent.xml" name="box">
Entity.xmlをAgent.xmlに変更しました。Entity.xmlを指定した場合コントローラの取り付けができないので注意してください。
次に世界ファイルを作成します。
$ emacs testBox.xml
testBox.xml
<?xml version="1.0" encoding="utf8"?> <world name="boxtest"> <gravity x="0.0" y="-9.8" z="0.0"/> <!--自作エンティティboxの設定--> <instanciate class="seBox.xml"> <set-attr-value name="name" value="box_000"/> <set-attr-value name="x" value="0.0"/> <set-attr-value name="y" value="5.0"/> <set-attr-value name="z" value="0.0"/> </instanciate> </world>
名前の設定をしなかった場合他のエンティティと見分けることができないので注意してください。
これで準備完了です。それでは実行してみましょう。
$ ./sigserver.sh -p 9001 -w testBox.xml
SIGViewerでサーバにつなげてみると木の箱が見えると思います。
#ref(): File not found: "box_1.jpg" at page "自作の形状ファイルの読み込み"
テクスチャを新しくSIGVerseに登録するにはテクスチャ設定ファイルを修正しなければなりません。 テクスチャ画像の設定ファイルはSIGViewerのインストール場所の以下のファイルを修正します。
C:\Program Files\SIGViewer_<version>\SIGViewer\media\materials\scripts\SIGVerseViewer.material
このファイルの一番最後を編集します。
test.jpgという画像を登録したいときは以下を追加します。
material test
{
	technique
	{
		pass
		{
			texture_unit
			{
				texture test.jpg
			}
		}
	}
}
そしてtest.jpgを C:\Program Files\SIGViewer_<version>\SIGViewer\media\materials\textures に保存しておけば読み込めるようになります。
ポリゴンの頂点座標をわざわざ指定せずに単純形状を作成することも可能です。(バージョン111026,ビューワー1.4.2以降対応)
box.x3dを以下のように修正します。
<?xml version="1.0" encoding="UTF-8"?>
<X3D profile="Interchange">
  <Scene>
    <Group >
      <Transform >
        <Shape >
          <Box size="10 10 10"/>
          <Appearance >
            <Material  diffuseColor='0.5 0.5 0.2' />
          </Appearance>
        </Shape>
      </Transform>
    </Group>
  </Scene>
</X3D>
読み込んでみると以下のような一辺の長さが10の箱が見えます。
#ref(): File not found: "hako.jpg" at page "自作の形状ファイルの読み込み"
対応している形状はBox, Shpere, Cylinderです。(※2011/12時点)