[ VRMLaboR Home | Script | Prototype | Advanced ]

スクリプトの概要

生物を考えてみよう。生物はまず、外界を感覚器によって知覚する。
これは、視覚、聴覚、嗅覚、触角.....などなどである。生物は入力された信号を神 経によって脳/神経系に伝える。
脳では何らかの複雑な処理をして、今度は運動系に信号を出力する。その信号はまた 神経を通り、手足を動かしたり、ものを食べたりする動作を行わせるのである。つま り、

[知覚系]→[脳/神経系]→[運動系]

という流れがある。

VRMLプログラミングもこれらとまったく同様の構成となっている。

[トリガ]→[ロジック]→[ターゲット]

VRMLでアニメーションを行わせるときの流れは、このように簡単に表わせる。

  • トリガはVRMLの場合、多くはセンサーノードからの入力である。  センサーは、大部分はユーザーの動作による、マウスデバイスからの入力を探知す る。
     複雑なものならば、入力はまた別のスクリプトからの出力となることもある。
  • ロジックはスクリプトノードである。
     しかし、生物でも複雑な処理は脳で行うが、単純なものは脊髄反射で脳を通らず、 直接、入力信号を運動系に返してしまうものがある。たとえば、目にゴミが飛んでき たら、反射的にまぶたを閉じるなどである。
     VRMLでも、スクリプトノードを使わず、タイムセンサーと補間器を組み合わせるな どして、簡単にターゲットにつなげてしまう方法もある。
  • ターゲットとは実際にVRMLブラウザ上で、何らかの目に見える変化を起こさせるも のである。
     VRMLの場合、各ノードのフィールド値を変化させて、アニメーションを行わせるの である。
     たとえばTransformノードのtranslationフィールドの値を変化させて、物体を移動 させるなどである。

変数といえるフィールドにはイベントインイベントアウトがある。
フィールドはSFVec3f、SFInt32などさまざまな型があるが、イベントアウトで出力さ れたデータは、同じ型のイベントインに入力されて、VRMLのノード間でデータが受け 渡されて行くのである。
このイベントインとイベントアウトを結びつけるものがROUTE(経路)という特殊コ マンドである。

スクリプトノードは、こんな感じで使用する。


   Transform { 
	children [
	DEF TOUCH TouchSensor { }
	DEF SHPERE Group { .......... }
	]
   }

   DEF MOVER Script { 
	eventIn SFTime click
	eventOut SFVec3f pos
	url "vrmlscript:
	function click (value, ts)
	{
		pos = new SFVec3f(0, 0, 0);
	}"
   }

   ROUTE TOUCH.isActive TO MOVER.click
   ROUTE MOVER.pos TO SPHERE.translation

この例では、TOUCHというタッチセンサーがクリックされると、isActive信号がスク リプトMOVERのイベントインclickに入る。
すると、posというイベントアウトが出され、ROUTEにより、SPHEREというジオメトリ の位置を変換する。