#VRML V1.0 ascii Separator { DEF BackgroundImage Info{ string "star.gif" } Texture2 { filename "gon_ani.gif" } SpinGroup { rotation 1 0 0 .05 local FALSE SpinGroup { rotation 0 1 1 -0.1 local TRUE DEF cube Separator { Translation { translation 0 0 10 } Cube { width 10 height 10 depth 10 } } } } Separator { Texture2Transform { translation 0 0 rotation 0.5 scaleFactor 8 4 center 0 0 } Texture2 { filename "star_ani.gif" } SpinGroup { rotation 0 1 0 -0.01 local TRUE Transform { translation 0 0 0 rotation 0 0 1 -0.2 scaleFactor 1.5 1 0.5 scaleOrientation 0 0 0 0 center 0 0 0 } Sphere { radius 4 } } } }
string "file名"
と指定するだけです。指定できるイメージはgifとbmpの2種類です。もしかしたらブラウザによってはjpgやその他のフォーマットもサポートしているかもしれません。
サンプルで使用しているのは上の星空のgifファイルです。
ここにファイルとして夕焼けとか街とかいったイメージを使えば、いい感じの世界も作れると思います。ただし、背景へイメージファイルを貼り付ける場合、自動的に格子状に張り付くので、サンプルのように格子状に張り付けられても気にならないものは問題ありません。しかし、街などの写真を背景にする場合には、イメージのサイズとHTMLのembedタグで指定する領域のサイズ、そして、オブジェクトのサイズにも気を使わないといけません。
メインページの「VRMLで遊ぼう」のタイトルには空の背景を使っています。
Transform { }
Transform nodeはオブジェクトを変形させるnodeです。オブジェクトを伸縮させることができます。したがって、球を縦長にしたり、薄っぺらにしたり、立方体をひしゃげさせたりと色んな変形が可能です。
このサンプルでは球の形を変形させています。オブジェクトに透過(透明)色を使っているので形は見づらいでしょうが、中心にあるのが変形した球なのです。
指定できるパラメータは以下の5つ。
rotationは図形の傾きを指定します。SpinGroupのところで説明したのとは使い方が多少ことなります。最初の3つ数字はx、y、z、それぞれの軸を現します。ここに0以外を指定するとその軸に対して右回りに傾けることを意味します。そして、どれくらい傾けるかを指定するのが最後の数字です。この4つ目の数字は角度を表すのですが、その表しかたが一筋縄ではいきません。ラジアンという角度の単位を使って現すのです。1ラジアンが57.2958度です。従って、動かしたい角度を57.2958で割った数字を書けばいいのです。たとえば、x軸を中心に90度傾けたければ、"1 0 0 1.57"と指定すればいいのです。
translation 0 0 0 <--- 通常のtranslationと同じ機能 rotation 0 0 0 0 <---オブジェクトの傾き現す。最初の3つがx、y、z、 それれの軸を現し、最後の一桁が角度を現します。 scaleFactor 1.5 1 0.5 <---x、y、z、それぞれの方向へのサイズ指定 scaleOrientation 0 0 0 0 <---図形の傾きを現す。表記方法は上記のrotationと同じです。 center 0 0 0 <--- オブジェクトの中心の座標を設定する。
translationは1つ目のサンプルで説明しました。
scaleFactorはしごく単純にオブジェクトをx、y、zそれぞれの方向にどれだけ拡大縮小するかということです。このサンプルでは"1.5 1 0.5"という値を設定していますが、これはx軸に(左右の長さ)を1.5拡大し、y軸(高さ)を変更せず、そしてz軸に(奥行き)を半分にしているわけです。
scaleOrientationで図形をひしゃげさせることができます。rotationでは図形を傾けることができますが、このパラメータでは、ひし形を作ることができます。
ただ、ひしゃげる度合いはscaleFactorと連動します。たとえば、
Transform { scaleFactor 1 1 1 scaleOrientation 1 0 0 0.76 } Cube { }とした場合、立方体はx軸を中心として右回りつまり、画面の奥に向かってひしゃげるはずですが、実際には何もおこりません。ところが、
Transform { scaleFactor 1 2 1 scaleOrientation 1 0 0 0.76 } Cube { }とすると縦長の直方体が画面の奥に向かってひしゃげます。またまた、ところが、
Transform { scaleFactor 2 2 2 scaleOrientation 1 0 0 0.76 } Cube { }とやると、またまた、何も起こりません。この当たりは思考錯誤しながら図形を決めていくしかないようです。
centerパラメータですが、これはtranslationと同じにオブジェクトの位置を移動させる機能を持ちます。指定方法はおなじみのx、y、zの値です。ただし、他のパラメータの値が設定されてない場合は機能しません。また、値はマイナスになります。つまり、3と指定した場合には負の方向に3動くということです。
まぁ、このパラメータは省略してもかまわないでしょう。
Texture2Transform { }
Texture2Transform nodeはTextureの変形します。指定できるパラメータはTransformと同じです。しかしながら、2次元なのでパラメータの因数は2つになります。
ここで使われるパラメータはTransformで使うものとほんとんど同じなので、説明は不要でしょう。ただ、scaleFactorだけは、Transform nodeのパラメータと違って、テクスチャを格子状に貼り付けることができます。上の例では球を横に8、縦に4合計で32に分割して32枚のテクスチャを貼り付けています。50ピクセル X 50ピクセルくらいの大きさの模様を描いたテクスチャファイルをオブジェクトに貼り付けたいような場合、オブジェクトのサイズによってはテクスチャが拡大されてしまい、格好悪くなってしまいます。そこでテクスチャを格子状に繰り返し貼り付けることによって、より描いたそのままのイメージでテクスチャを貼り付けることができます。このような場合にはこの機能がとても便利ですね。
translation 0 0 <--- オブジェクトまたは面のどの位置をテクスチャの右上にするか rotation 0.5 <---テクスチャはどれくらい傾けるかをラジアン角度(57.2958)で指定。 scaleFactor 8 4 <--- テクスチャを格子状に張るときの縦横の数。 center 0 0 <---テクスチャの位置指定。
テクスチャ関連の説明をします。
左のような縦長のテクスチャを貼り付ければいいだけです。ただし、一つだけルールがあります。縦の長さが横の長さの整数倍になってなければなりません。言い換えると連続して表示させたい画像を正方形にして縦にならべて、それを一つのイメージにすればいいのです。 左の顔の絵は同じものを2回づつ使っています。なぜかというと歯が出ていない顔と歯がでている顔を一つづつ、合計2つの画像のアニメーションにすると、動きが速すぎて痙攣しているように見えたからです。このアニメーションテクスチャには一つの絵が表示されている時間の設定などがないのです。したがって、アニメーションテクスチャを作成する場合、多少細かな動きの連続にする方がスムースなアニメーションになるでしょう。
|
SpinGroup { rotation 1 0 0 .05 local FALSE SpinGroup { rotation 0 1 1 -0.1 local TRUE DEF cube Separator { Translation { translation 0 0 10 } Cube { width 10 height 10 depth 10 } } } }まず、最初のSpinGroupでは公転を指定しています。ここではrotationでx軸を中心に回転することを指定し、自転はしないと指定(local FALSE)しています。ただし、オブジェクトを公転させるためにはTranslationを使って、オブジェクトを中心からづらしておく必要があります。なぜなら、SipnGroupの公転は常に座標0、0、0、を中心に回転するからです。その作業はCube nodeの直前のTranslation nodeでやっています。x軸を中心に回転しますから、オブジェクトをz軸の正方向、つまり、手前に10動かしています。こうすることによって、このオブジェクトは座標0、0、0、を中心に半径10の円を描くように回転します。
このサンプルの解説はここまでです。
戻る | 次のサンプルへ | メインページ |