- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
[[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>
上で指定した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
に保存しておけば読み込めるようになります。