[[Tutorial]] #contents *自作形状ファイルの読み込み(静止物体) [#fd56e710] ※このチュートリアルはv2.1.0以降対応です。 ここでは形状ファイル(x3d)を作成してSIGVerseに登場させる方法を説明します。 **形状ファイル作成 [#cbb45b7b] まず静止物体の形状ファイルを作成します。形状ファイルはノードとフィールドからなります。SIGVerseで形状ファイルを読み込むためにGroup, Transform, IndexFaceSetなどのノードを用いて記述します。 ここでは簡単な立方体の形状ファイルを作成します。 ***形状ファイル作成 [#b0eabf1f] サーバ側でSIGVerse作業ディレクトリに移動し、形状ファイルを作成します。 $ cd ~/MyWorld $ emacs box.x3d box.x3d #highlight(xml){{ <?xml version="1.0" encoding="UTF-8"?> <X3D profile="Interchange"> <Scene> <Group > <Transform > <Shape> <Box size="10 10 10"/> <Appearance > <Material diffuseColor='0.2 0.8 0.2' /> </Appearance> </Shape> </Transform> </Group> </Scene> </X3D> }} この形状ファイルは1辺が10の立方体です。 以下の行で色(r,g,b)を設定します。緑色に設定しました。 <Material diffuseColor='0.2 0.8 0.2' /> box以外にもsphere,cylinder形状を作成することができます。 ***エンティティの設定 [#b46382b1] エンティティの設定ファイルを作成します。 $ emacs box.xml #highlight(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.x3d</filename> </x3d> </define-class> }} <filename>box.x3d</filename> の行で先ほど作成した形状ファイルを指定しました。 ***エンティティにコントローラをアタッチする場合 [#mae6a055] 作成したエンティティにコントローラをアタッチして自律動作させたい場合は2行目を修正します。 <define-class inherit="Entity.xml" name="box"> ↓ <define-class inherit="Agent.xml" name="box"> Entity.xmlをAgent.xmlに変更しました。Entity.xmlを指定した場合コントローラの取り付けができないので注意してください。 ***世界ファイル作成 [#n22bd9fe] 次に世界ファイルを作成します。 $ emacs testBox.xml testBox.xml #highlight(xml){{ <?xml version="1.0" encoding="utf8"?> <world name="boxtest"> <gravity x="0.0" y="-980.7" z="0.0"/> <!--自作エンティティboxの設定--> <instanciate class="box.xml"> <set-attr-value name="name" value="box_000"/> <set-attr-value name="x" value="0.0"/> <set-attr-value name="y" value="20.0"/> <set-attr-value name="z" value="0.0"/> <set-attr-value name="dynamics" value="true"/> <set-attr-value name="collision" value="true"/> </instanciate> </world> }} 立方体を高さ20cmのところに設置します。 ***実行 [#dd8bb5f6] これで準備完了です。それでは実行してみましょう。 $ sigserver.sh -w ./testBox.xml SIGViewerでサーバにつなげてみると緑色の箱が見えます。 #ref(./box_1.PNG,40%) シミュレーションを開始すると箱が落下します。 * ポリゴン形状[#a1dee552] 頂点座標からポリゴン形状を作成する場合はshapeノードの中を以下のように修正します。 $ emacs box.x3d #highlight(xml){{ <Shape> <Box size="10 10 10"/> <Appearance> <ImageTexture url='"man_c01.jpg"' /> </Appearance> </Shape> }} ↓ #highlight(xml){{ <Shape > <Appearance > <ImageTexture repeatS="true" url='"checker.png"' repeatT="true"/> </Appearance> <IndexedFaceSet convex="false" coordIndex=" 1 2 3 0 -1 7 6 5 4 -1 5 1 0 4 -1 6 2 1 5 -1 7 3 2 6 -1 4 0 3 7 -1" 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" solid="false"> <TextureCoordinate point="0.0 0.0, 0.0 1.0, 1.0 1.0, 1.0 0.0, "/> <Coordinate DEF="Coaster_c01GeoPoints" 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, "/> </IndexedFaceSet> </Shape> }} 以下の行でテクスチャ"checker.png"を指定しました。 #highlight(xml,firstline[3]){{ <ImageTexture repeatS="true" url='"checker.png"' repeatT="true"/> }} 色々なテクスチャがクライアント側のSIGViewerインストール先にサンプルとして用意されています。 テクスチャサンプル場所: <sigverseインストール場所>\SIGViewer\media\materials\textures ここに自分専用のテクスチャを追加することも可能です。 ***実行 [#dd8bb5f6] それでは実行してみましょう。 $ sigserver.sh -w ./testBox.xml ビューワーで接続する前に以下の設定をしておきます。 ビューワーのメニューバーにある「Settings」をクリックして「Overwrite shape file」にチェックを入れておきます。これによりクライアント側に置かれた形状ファイルが上書きされます。 ビューワーのメニューバーにある「Settings」をクリックして「Overwrite shape file」にチェックを入れておきます。これによりクライアント側の形状ファイルが上書きされます。 それではサーバに接続してみましょう。 以下のようなチェック模様の箱が見えます。 #ref(./box_2.PNG,40%) //※注意)SIGVerseではX3D形式のファイルを読み込み可能ですが、完全には対応しておりません。 *Old Version [#x6e41d74] - [[自作の形状ファイルの読み込み(v1.4.8)]] #highlight(end)