[[Tutorial]] #contents *自作形状ファイルの読み込み(静止物体) [#fd56e710] ここでは形状ファイル(vrml,x3d)を作成してSIGVerseに登場させる方法を説明します。 **クライアント側 [#cbb45b7b] まず静止物体の形状ファイルを作成します。形状ファイルはノードとフィールドからなります。SIGVerseで形状ファイルを読み込むためにGroup, Transform, IndexFaceSetなどのノードを用いて記述します。 ここでは簡単な立方体の形状ファイルを作成します。 ***形状ファイル作成 [#b0eabf1f] クライアント側で以下のファイルを作成します。 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(box.x3d) //Shapeノードのgeometry値にSphereノードやBoxノードを指定すると正常に読み込まれないので注意が必要です。 ここでは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 に保存します。 **サーバ側の設定 [#t1c144ba] 次はサーバ側で設定を行います。 ***形状ファイル作成 [#d9b3d62d] 上で作成したbox.wrlをサーバ側の /home/<username>/sigverse-<version>/share/sigverse/data/shape にコピーします。 ***エンティティの設定 [#b46382b1] エンティティの設定ファイルを作成します。 $ 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はサーバ側ではエンティティ用にすでに用意されています。次に世界ファイルを作成します。 ***世界ファイル作成 [#n22bd9fe] $ 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> 名前の設定をしなかった場合他のエンティティと見分けることができないので注意してください。 ***実行 [#dd8bb5f6] これで準備完了です。それでは実行してみましょう。 $ ./sigserver.sh -p 9001 -w testBox.xml SIGViewerでサーバにつなげてみると木の箱が見えると思います。 #ref(box_1.jpg) *テクスチャの登録 [#h8ac8d1e] テクスチャを新しく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 に保存しておけば読み込めるようになります。 *単純形状 [#f7f8cc8f] ポリゴンの頂点座標をわざわざ指定せずに単純形状を作成することも可能です。(バージョン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(hako.jpg) 対応している形状はBox, Shpere, Cylinderです。(※2011/12時点)