#VRML V1.0 ascii DEF BackgroundImage Info{ string "star.gif" } SpotLight { on TRUE intensity 1 color 1 1 1 location 0 2 0 direction 0 -1 0 dropOffRate 0 cutOffAngle 0 } PerspectiveCamera { position 0 0 4 orientation 0 0 0 0 focalDistance 4 # heightAngle 0 } Separator { SpinGroup { rotation 1 0 0 .03 local FALSE SpinGroup { rotation 1 0 1 .04 local TRUE Translation { translation 0.0 0.0 2.0 } DEF cube1 Group { Texture2 { filename "gon_ani.gif" } Scale { scaleFactor 0.5 0.5 0.5 } Cube { } } } } } Separator { SpinGroup { rotation 1 0 0 .03 local FALSE SpinGroup { rotation 1 0 1 .04 local TRUE Translation { translation 0.0 0.0 -2.0 } USE cube1 } } } SpinGroup { rotation -1 0 0 .02 local TRUE Texture2Transform { scaleFactor 4 4 } Texture2 { filename "wood.gif" } Sphere { radius 1 } } Material { diffuseColor 1 0.1 0.1 emissiveColor 0.5 0 0 shininess 0.7 } Separator { SpinGroup { rotation -1 0 0 .02 local TRUE Translation { translation 1.5 0.0 0.0 } Rotation { rotation 1 1 0 3.14 } DEF cone1 Cone { parts ALL bottomRadius 0.5 height 1 } } } Separator { SpinGroup { rotation -1 0 0 .02 local TRUE Translation { translation -1.5 0.0 0.0 } Rotation { rotation 1 -1 0 3.14 } USE cone1 } }
SpotLight { }
SpotLight nodeはその名の通りスポットライトです。他に何の説明も要らないとおもいます。但し、SpotLightはライトの位置によっては画面が真っ暗けになったりするので、気をつけましょう! 指定できるパラメータは以下の通り。
PerspectiveCamera { }
on TRUE <-- TRUEでライトオン、FALSEでライトオフ。 intensity 1 <-- 光の量。0から1までの間で指定する。 color 1 1 1 <-- 光の色。RGB方式で指定する。 location 0 2 0 <-- ライトの位置。x、y、z、のそれぞれの座標を指定。 direction 0 -1 0 <-- 光の方向。-1 0 0で手前から奥に向かって照らす指定。 dropOffRate 0 <-- 光の減衰率。光点からどれくらい離れると どれくらい光りが弱くなるかの設定。 cutOffAngle 0 <-- ライトが照らす範囲をラジアン角度(57.2958度)で指定する。
ちなみに、PerspectiveCameraを指定して、positionを省略すると0、0、1のポジションにカメラが置かれる。
position 0 0 4 <-- カメラの位置。x、y、zの座標で指定する。 orientation 0 0 0 0 <-- カメラの角度。x、y、zのどれかに1または-1を指定する。4桁目はラジアン角度。4桁目が0なら何も指定しないのと同じ。 focalDistance 4 <-- 焦点距離をメートルで指定する。カメラからどれくらいの距離にピントを合わせるかの指定。 heightAngle 0 <-- 垂直方向の可視角度をラジアン角度で指定する。狭くするとカメラがオブジェクトに接近し、大きくすると離れる。カメラの位置を指定するのと同じ機能。
Scale { }
Scale nodeはオブジェクトのx、y、zそれぞれの方向への伸縮を定義できるnodeです。前のサンプルで説明したTransform nodeのscaleFactorの機能だけを切り出したnodeです。オブジェクトの変形させたいが、傾けたり、ひしゃげたりはさせなくてよいというときに使います。指定できるパラメータは、
scaleFactor 0.5 0.5 0.5だけです。x、y、zはそれぞれの方向への伸縮を変更しのときを"1"として指定します。変更なしだからと言って、0を指定すると、その方向の厚みがなくなってしまうので気を付けましょう。
Material { }
Material nodeはオブジェクトの質感とか色味とかを指定するnodeです。指定できるパラメータは以下の通り。
実際に私が使用しているのは、diffuseColorとemissiveColorの二つくらいです。他のパラメータも使用して、もっと自分がイメージする質感に近づけようとしたことは何度もあるのですが、困ったことが一つあります。Material nodeの解釈がこれまたbrowserによって異なるということなのです。私の場合Netscape + LIVE3Dベータ2を使用してますが、この環境で自分の思い通りの色を作っても、他のbrowserで見るととんでもない色味になっているというわけです。そんな訳で無難な道を選んでしまうわけです。
diffuseColor 1 0.1 0.1 <-- オブジェクトの地の色。 emissiveColor 0.5 0 0 <-- オブジェクトの光の当たっていない部分の色。光が当たっている部分がdiffuseColorの色ならば、光の当たっていない部分に行くに従ってこの色に変わって行く。 ambientColor 0 0 0 <-- 周囲の色からの反射を指定するらしい。はっきり言って、このパラメータは良くわかりません。 specularColor 0 0 0 <-- 鏡のように光りを反射するときの色。オブジェクトの一番テカッている部分の色。通常この部分は白に指定するものらしいです。 shininess 0.7 <-- どれくらいテカテカにするかの指定。0から1の間の数値を指定。 transparency 0 <-- オブジェクトの透明度の指定。0から1の間の数値を指定。
Rotation { }
Rotation nodeが単独で使用されるのはこのサンプルが始めてだと思うので、説明しておきます。このnodeはオブジェクト(実は座標軸)を傾ける機能を持っています。以下のパラメータで傾きを指定します。
rotation 1 1 0 3.14最初の3つ数字はx、y、z、それぞれの軸を現します。ここに0以外を指定するとその軸に対して右回りに傾けることを意味します。そして、どれくらい傾けるかを指定するのが最後の数字です。この4つ目の数字は角度を表すのですが、その表しかたが一筋縄ではいきません。ラジアンという角度の単位を使って現すのです。1ラジアンが57.2958度です。従って、動かしたい角度を57.2958で割った数字を書けばいいのです。たとえば、x軸を中心に90度傾けたければ、"1 0 0 1.57"と指定すればいいのです。
DEF.....USE
DEFでnodeやGroupに名前を付けて、USEで再利用することをInstacing(インスタンスィング)と呼びます。同一図形を何度も書くのを裂け、データ量を減らし、既にクライアントにダウンロードされているnodeやGroupを再利用することによりデータ転送時間を減らすことができます。従って、DEFが先に指定されている必要があります。このサンプルでは、
DEF cone1 Cone { parts ALL bottomRadius 0.5 height 1 }cone1という名前で、底面の半径が0.5m、高さが1m、すべての面が塗られた円錐を定義しています。その下で、"USE cone1"と指定してまったく同じ円錐をCone nodeを使わずに指定しています。
このページの解説はここまでです。
戻る | 次のサンプルへ | メインページ |