#VRML V2.0 utf8
# 視点
Viewpoint {
position 0 30 75
orientation -1 0 0 0.45
description "vp0"
}
Viewpoint {
position 0 50 40
orientation -1 0 0 1.0
description "vp1"
}
Viewpoint {
position 0 25 20
orientation -1 0 0 1.0
description "vp2"
}
# ナビゲーション情報
NavigationInfo {
type "EXAMINE"
headlight FALSE
}
# 太陽光
DirectionalLight {
direction -1 -1 -1
ambientIntensity 0.8
}
# 背景
Background {
skyAngle [
1.4 1.57 1.58
]
skyColor [
0.3 0.3 1.0
0.4 0.4 1.0
0.6 0.6 1.0
0.2 0.8 0.2
]
}
# 地面
Transform {
translation 0 -0.05 0
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0.2 0.8 0.2
}
texture ImageTexture {
url "green.png"
}
}
geometry Box {
size 100 0.1 100
}
}
DEF ThS TouchSensor {}
]
}
# 羊が追加される場所
DEF Sheeps-Gp Group {}
DEF AddSheep-Sc Script {
eventIn SFVec3f set_hitPoint
eventIn SFTime touchTime
eventIn MFNode set_sheeps
field SFNode SheepsGp USE Sheeps-Gp # 羊達のグループ
field MFString sheepUrl "proto_sheep.wrl" # 羊のプロトタイプとインスタンス
field SFVec3f hitPoint 0 0 0 # カーソルが地面に触れた位置
directOutput TRUE
url "javascript:
function set_hitPoint (vec) {
hitPoint = vec;
}
function touchTime () {
Browser.createVrmlFromURL( sheepUrl, SheepsGp, 'addChildren' );
}
function set_sheeps (sp) {
// (1)
var id = sp.length - 1;
var packet = new MFFloat();
packet[0] = id;
packet[1] = hitPoint.x;
packet[2] = 0;
packet[3] = hitPoint.z;
sp[id].packet_in = packet;
// (2)
for ( var i = 0; i < id; i++ ) {
Browser.addRoute( sp[i], 'packet_out', sp[id], 'packet_in' );
Browser.addRoute( sp[id], 'packet_out', sp[i], 'packet_in' );
}
}
"
# (1) 最後に追加された羊に対して、IDナンバーと地面をクリックした位置を与える。
# IDナンバーは最初の羊が 0 であり、以降羊が追加されるごとに 1 づつ増える。
# (2) 追加された羊が2匹目以降( id > 0 )ならば、既にいる羊たちとデータ交換を行うための ROUTE を増やす。
}
ROUTE ThS.hitPoint_changed TO AddSheep-Sc.set_hitPoint
ROUTE ThS.touchTime TO AddSheep-Sc.touchTime
ROUTE Sheeps-Gp.children TO AddSheep-Sc.set_sheeps