pset_0.wrl source
#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