[[Tutorial]] #contents *自作形状ファイルの読み込み(静止物体) [#fd56e710] ここでは形状ファイル(vrml,x3d)を作成してSIGVerseに登場させる方法を説明します。 **クライアント側 [#cbb45b7b] まず静止物体の形状ファイルを作成します。形状ファイルはノードとフィールドからなります。SIGVerseで形状ファイルを読み込むためにはGroup, Transform, IndexFaceSetなどいくつか 設定が必須のノードがあります。 ここでは簡単な立方体の形状ファイルを作成します。 ***形状ファイル作成(vrmlの場合) [#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, ] } } } ] } 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] 次はサーバ側で設定を行います。 ***エンティティの設定 [#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> 上で指定した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="10.0"/> <set-attr-value name="z" value="0.0"/> </instanciate> 名前の設定をしなかった場合他のエンティティと見分けることができないので注意してください。