#VRML V2.0 utf8
Viewpoint {}
NavigationInfo {
type "EXAMINE"
}
# 箱
Group {
children [
Shape {
appearance Appearance {
texture DEF PT PixelTexture {}
material Material {
diffuseColor 1 1 1
}
}
geometry Box {
size 5 5 5
}
}
DEF ThS TouchSensor {}
]
}
# 点描画スクリプト
DEF Sc Script {
eventIn SFVec2f set_hitTexCoord
eventIn SFBool penUpDowned
eventOut SFImage image
field SFInt32 dt 64 # テクスチャの1辺のピクセル数
field MFInt32 ary [] # テクスチャーの色情報が納められている配列
field SFVec2f hitPoint 0 0 # ポインタが触れているテクスチャー座標
field SFInt32 penColor 0xFFFF00 # 点の色
field SFInt32 bgColor 0x0000FF # 背景の色
url "javascript:
// SFVec2fオブジェクトで示されたテクスチャー座標に penColor を適応させる為の関数。
function pset(v) {
var tv = v.multiply ( dt );
var s = Math.floor( tv.x );
var t = Math.floor( tv.y );
s = Math.max ( 0, Math.min( dt - 1, s ));
t = Math.max ( 0, Math.min( dt - 1, t ));
ary[ s + t * dt ] = penColor;
}
function initialize () {
var px = dt * dt;
// テクスチャー全体を bgColor で塗りつぶして、ary を初期化する。
for ( var i = 0; i < px; i++ ) ary[i] = bgColor;
image = new SFImage ( dt, dt, 3, ary );
}
function set_hitTexCoord (v) {
// キャンバス上のポインタが触れている座標を hitPoint にセットする。
hitPoint = v;
}
function penUpDowned (active) {
if (active) {
// キャンバス上でポインタのボタンが押されたら、ポインタの座標に点を描く。
pset( hitPoint );
image = new SFImage ( dt, dt, 3, ary );
}
}
"
}
ROUTE Sc.image TO PT.image
ROUTE ThS.hitTexCoord_changed TO Sc.set_hitTexCoord
ROUTE ThS.isActive TO Sc.penUpDowned