VRMLプログラム(ともかく作って見よう)
何はともあれ、まずはVRMLプログラムを作って表示してみましょう。
VRMLプログラムは拡張子はwrlですが、中身テキストですからメモ帳で簡単に作成できます。
作成したファイルは拡張子をwrlにして下さい。あとはHTML文に以下の記述で埋め込むだけです。
ホームページに埋め込むには
<embed src="*****.wrl">
と記述するだけです。
1 BOXを表示
Box.wrlのプログラムをみてみましょう。
VRMLプログラムは拡張子はwrlですが、中身なテキストファイルです。メモ帳などで作成できます。
#VRML V2.0 utf8 #1 Shape { #2 appearance Appearance{ #3 material Material { #4 diffuseColor 0.5 0.66 0.45 #5 specularColor 0 1.0 1.0 #6 shininess 0.5} } #7 geometry Box {}} #8 |
#1 VRMLプログラムの先頭には必ずヘッダーをつけてください。#VRML
V2.0 utf8 はVRML2.0で作成
されていることを示す決まり文句です。
#2 Shapeノード 形状を記述するのに必ず記述する決まり文句です。ここからVRMLのコードが始まります。
#3 appearanceフィールド 外観を記述するフィールドで、ここにはAppearanceノードを記述します。
#4 Appearanceノードの中で、materialフィールド(色や材質を記述するフィールド)を記述します。
materialフィールドにはMaterialノードを設定します。以下、#5、#6、#7で具体的に色、材質を設定します。
#5 diffuseColorフィールド 色を設定します。色の指定は、R(Red)、G(Green)、B(Blue)で行い、設定値は
0 〜 1.0です。
#6 specularColorフィールド 物体の最も光沢のあるところ(ハイライト)の色の設定をします。色の設定は
やはりRGB値で行います。ここの例ではハイライト部分は青緑に設定しています。
#7 shininessフィールド ハイライト部分に当たる光の鋭さを設定します。設定値は0〜1.0です。値が大きいほど
鋭い光になります。
他に、MaterialノードにはemissiveColorフィールド(物体が発光している時の、発光色の設定。RGB値)
transparencyフィールド(物体の透明度の設定)などがあります。
#8 geometoryフィールド ここには物体の形状を設定するフィールドです。ここではBoxノード(箱型)を
設定しました。Boxノードに更にBoxの形状、サイズを決める各種フィールドがありますが、ここでは何も
設定せず、デフォルト値を使うようにしています。
結構わかりにくいかもしれませんので、記述の構造を整理してみます。
Shape−appearanceフィールド−Appearanceノード−materialフィールド−Materialノード−diffuseColorフィールド
| |
| −specularColorフィールド
| |
| −shininessフィールド
−geometoryフィールド−Boxノード
なお、VRMLプログラムでは大文字、小文字は厳密に区別されます。例えばフィールド名は小文字で
記述され、ノード名は先頭の1文字が大文字で記述されます。
また、#から始まる1文はコメントとなります。
まずは、上のプログラムの各種フィールド値をご自分で変えて、どうなるか試してみて下さい。
VRMLプログラムの感覚がつかめると思います。
2 照るてる坊主(球+三角錐)
プログラムは以下の通りです。
#VRML V2.0 utf8 #1 Transform{ #2 translation 0.0 -1.0 0.0 #3 children[ #4 Shape { #5 appearance Appearance{ #6 material Material { #7 diffuseColor 0.8 0.86 0.85 #8 specularColor 0 1.0 1.0 #9 shininess 0.5} } #10 geometry Cone {bottomRadius 2.0 #11 height 4.0}}]} #12 Transform{ #13 translation 0.0 1.7 0.0 #14 children[ #15 Shape { #16 appearance Appearance{ #17 material Material { #18 diffuseColor 0.8 0.9 0.9 #19 specularColor 0 1.0 1.0 #20 shininess 0.7 #21 }} #22 geometry Sphere {radius 1.5 #23 }}]} |
Boxのところででなかったコードについて解説します。
#2 VRMLでは、座標設定を行わなかったオブジェクトはワールド座標系の原点に中心をおきます。
今回のように複数の形状を組み合わせてオブジェクトを作る時には、それぞれの形状のローカル座標系
の設定が必要となります。
Transformノードは複数のノードをグループ化し、そのグループ単位で座標設定を行うことを可能にします。
#3 translationフィールド ローカル座標系の原点の設定をします。ここでは
(x,y,z)=(0,-1,0)と設定し
三角錐(corn)がY軸上少し下にある(-1)よう設定しています。
#4 childrenフィールド 複数のノードをグループ化します。以下に記述されるノード群は、同じローカル
座標系に配置されます。(ここでは三角錐ひとつだけですが)
#11 Cornノードは三角錐です。 bottomRadiusは底面の半径を設定するフィールドです。heightは三角錐の
高さです。
#14 球体(Sphere)の方はY軸上少し上(1.7)に設定しました。
#23 Sphereノードは球体です。radiusは球の半径を設定するフィールドです。
基本的なさわりの部分だけですが、少しはVRMLの世界が見えてきましたでしょうか。
文法的なところは、今回はおもいきり省いて、とりあえず自分で少し記述してみるのに必要な
実践的な部分だけをとりあげてみました。ご自分で、フィールド値を変更していろいろ試してみて
下さい。