基本となる5つのオブジェクト


基本となる5つのオブジェクトは文字(アスキーテキスト)、立方体、球、円錐そして円柱です。
#VRML V1.0 ascii

DirectionalLight {
	on         TRUE       
	intensity  0.5        
	color      1 1 1      
	direction 0 -1 -1  
}
FontStyle {
	size     0.7      
	family   SERIF   
	style    BOLD   
}
DEF text1 Separator {
	Translation { translation 0 1 0 }
	AsciiText {
	string "Paradise Caos"    
	spacing 1
	justification CENTER
	width 0
	}
}
DEF Cube Separator {
	Translation { translation -2 0 0 }
	Cube {
		width   1
		height  1
		depth   1
	} 
} 
DEF sphere Separator {
	Translation { translation -0.66 0 0 }
	Sphere { radius 0.5 }
}
DEF Cone Separator {
	Translation { translation 0.66 0 0 }
	Cone {
		parts ALL
		height 1
		bottomRadius 0.5
	}
} 
DEF Cylinder Separator {
	Translation { translation 2 0 0 }
	Cylinder {
		parts ALL
		height 1
		radius 0.5
	}
} 

以下の解説では、以前のページで紹介したnodeについは省きます。
DirectionalLight { }
DirectionalLightはオブジェクトの一定の場所に常に光が当たっている状態にします。例えば、 -zの方向(正面)から見たときに上から光が当たっている設定にした場合、このオブジェクトを スピンさせても、オブジェクトの光の当たっている場所は変わらないのです。 この例では、オブジェクトに上と正面から光が当たっています。オブジェクトをスピンさせると オブジェクトの反対側と下側は黒くなってます。
パラメターは以下の4つです。
	on         TRUE <--- 光を当てるかどうかを"TRUE"または"FALSE"で現す。
	intensity  0.5   <--- 光の強さ。0から1まで。    
	color      1 1 1 <--- 光の色。RGB方式。各数字は0 から 1の数字。     
	direction 0 -1 -1  <--- 光の当たる方向。それぞれx軸方向、y軸方向、z軸方向を現す。
			         数字は0で光なし。それ以外で光あり。y軸方向は-で上から。
FontStyle { }
FontStyleノードは、後述のAsciiTextノード用のパラメータノードです。
FontStyleノードのパラメータは以下の3つ。
	size	0.7	<---文字の大きさ
	family     SERIF    	<---fontのタイプ
	style      BOLD     	<---fontのスタイル
sizeパラメタで指定する数字は、大きさを現しあます。他のオブジェクトとバランスを考えてサイズを指定しましょう。familyパラメタで指定できるのは、上記のSERIF(TimesRoman系の文字)に加え、SANS(Helvetica系)とTYPEWRITER(Courier系)の2種類。ただし、familyパラメータは InternetExplorerのプラグインでは認識されない模様です。最後にstyleでは、BOLD、ITALICとNONE が指定可能。
DEF text1 Separator { }
これは、DEFというコマンド(と呼ぶのかな?)とSeparator nodeの組み合わせです。まず、 Separator nodeは複数のnodeを一まとめにしてグルーピングするためのnodeなのです。ただ、 それだけの機能しかありません。しかし、このnodeの中で使用したnodeはこの中でしか影響力を持ちません。 だから例えば、この中でオブジェクトの傾きや色を設定したとしても、Separator nodeの外では影響がないとことです。

一方, DEF text1というのは何かといと、Separator nodeに名前を定義しているのです。text1というのは 私が勝手につけたのもであって、任意のもので構いません。DEF xxxによってSeparator nodeに 名前をつけるとどんないいことがあるかというと、node groupの再利用が可能になり、コーディング の工数を大幅に削減できるのである。同じ大きさ、形、色もオブジェクトを何個も使いたいという場合に、 このDEF xxx Separator { }を使ってオブジェクトを一回作っておけば、その後は、 "USE xxx" と記述すれば再利用可能なのです。
しかも、DEFは Separator nodeだけでなく、その他のnodeにも名前を付けることができます。 例えば、Translation nodeでY方向に10動かす指定をして、それに名前を付けておけば、USEを使って再利用して、何か他のオブジェクトを10だけY方向に動かしたいときに、使えるわけです。
Translation { translation x y z }
Translation nodeはオブジェクトの位置を指定するnodeです。 このnodeより後に指定されるオブジェクトの位置を指定することができます。 シンタックスは上の通りです。 x、y、zはそれぞれの方向への画面の中心点からオブジェクトの中心点までの距離を示します。
上の文で、中心点からの距離と書きましたが、Translation nodeが二回以上続けて指定された場合には、 その限りではありません。例えば、
Translation { translation 1 0 0 }
Translation { translation 1 0 0 }
このように指定された場合、この次に指定されるオブジェクトの位置はx軸の正の方向に2の距離です。 実際には、Translation nodeの後にTranslation nodeを含んだSeparator nodeを指定したりすると、 そういうことになります。
AsciiText { }
AsciiText nodeは文字を指定するnodeです。ただし、このnodeを使って設定した文字には厚みは有りません。
パラメータは以下の通り。

	string "Paradise Caos"	<--- 文字列を指定する。  ["Paradise","Caos"]と書くと2行になる。 
	spacing 1  		<--- 行間指定。
	justification CENTER	<--- 文字列のどこが中心点にくるかを指定する。CENTERの他に
				         RIGHTとLEFTが指定できる。
	width 0			<--- 文字間隔の指定。
Sphere { }
Sphere nodeは球を指定するnodeです。パラメータとして指定できるのでは、球の半径を示す"radius"のみ。

radius 0.5

のように指定します。指定する半径は他のオブジェクトや位置との関係を考慮に入れる。
Cone { }
Cone nodeは円錐を指定するnode。アイスクリームコーンのコーンですね。
指定できるパラメータは以下の通り。

	parts ALL 	   <--- 面塗りする部位を指定する。ALLで全面、SIDESで側面のみ、
				そしてBOTTOMで底面のみの面塗り。
	height 1  	   <--- 円錐の高さ。
	bottomRadius 0.5   <--- 円錐の底面の半径。
Cylinder { }
最後はCylinder node。これは円柱を指定するnode。パラメータはCone nodeのパラメータとほとんど同じ。
	parts ALL  	<--- 面塗りする部位を指定する。ALLで全面、SIDESで側面のみ、
			TOPで上面のみ、そしてBOTTOMで底面のみの面塗り。
	height 1  	<--- 円筒の高さ。
	radius 0.5	<--- 円筒の半径。

このソースの解説はこれで終わりです。


戻る 次のサンプルへ メインページ