Original Spec|
Sample
定義
Script {
exposedField MFString url []
field SFBool directOutput FALSE
field SFBool mustEvaluate FALSE
# And any number of:
eventIn eventType eventName
field fieldType fieldName initialValue
eventOut eventType eventName
}
VRML中で計算等をさせたいときはこのノードの中で
javascript
や
java
を用いて行いうことが出来ます。どの言語サポートするかは
ブラウザの使用によって異なります。
VRML97/2の仕様書ではスクリプトとしてECMAscriptと呼ばれるものの
記述がありますがこれは実質的にはjavascriptのことです。
Cosmoplayer2.1ではjavascriptしかサポートされていないようです。
- url
- スクリプトの内容
- directOutput
- eventInやfieldにによって渡されたノードに直接イベントを送れるかどうか
- mustEvaluate
- 出力するノードが利用不能でも処理を行う。
また以下の3種類を定義することがきます。
- eventIn eventType eventName
- field fieldType fieldName initialValue
- eventOut eventType eventName
javascriptを例に取ると、eventIn で指定されたイベントが入力された場合
同じ名前の関数が呼び出され、その中でeventOutに指定された変数を変化させ
るとイベントが送出されます。内部で使用する変数はfieldで指定します。
サンプル
javascriptを用いた例です。y=x*x*xの曲線状を球が動きます。
入力イベントがfractionで出力イベントはpositionです。
#VRML V2.0 utf8
DEF TS TimeSensor {
stopTime -1
loop TRUE
}
DEF Obj Transform {
translation -3 0 0
children [
Shape { geometry Sphere {} }
]
}
DEF SC Script {
eventOut SFVec3f position
eventIn SFFloat fraction
url "javascript:function fraction (value, time){
position[0] = value*3;
position[1] = value*value*value*3;
position[2] = 0;
}"
}
#イベントの配送
ROUTE TS.fraction_changed TO SC.fraction
ROUTE SC.position TO Obj.set_translation