pic_paint_0.wrl source
#VRML V2.0 utf8

Viewpoint {}

NavigationInfo {
type "EXAMINE"
}

# 箱
Shape {
appearance Appearance {
texture DEF PT PixelTexture {}
}
geometry Box {}
}

# テクスチャー作成スクリプト
DEF Sc Script {
eventOut SFImage image
field SFInt32 dt 64 # テクスチャの1辺のピクセル数
field SFColor red 1.0 0.3 0.3 # 赤色
field SFColor grn 0.3 1.0 0.3 # 緑色
field SFColor blu 0.3 0.3 1.0 # 青色
field SFColor yel 1.0 1.0 0.2 # 黄色
field SFColor blk 0.0 0.0 0.0 # 黒色
field SFColor colB 0.5 0.2 0.2 # テクスチャーの背景色
url "javascript:

// SFColorオブジェクトを 0 から 0xFFFFFF の間の整数に変換する為の関数。
function SFColor2Int (c) {

var r = Math.floor ( c.r * 255 );
var g = Math.floor ( c.g * 255 );
var b = Math.floor ( c.b * 255 );

return r * 65536 + g * 256 + b;

}

function initialize () {

var rColor = SFColor2Int ( red );
var gColor = SFColor2Int ( grn );
var bColor = SFColor2Int ( blu );
var yColor = SFColor2Int ( yel );
var bkColor = SFColor2Int ( blk );
var bgColor = SFColor2Int ( colB );
var ary = new MFInt32 ();
var px = dt * dt;

// テクスチャー全体を bgColor の色で塗る。
for ( var i = 0; i < px; i++ ) ary[i] = bgColor;

var x0 = dt / 4;
var y0 = dt / 4;
var x1 = dt * 3 / 4;
var y1 = dt * 3 / 4;

// 緑と青の横線を描く。
for ( var s = x0; s <= x1; s++ ) {
ary[ s + y0 * dt ] = gColor;
ary[ s + y1 * dt ] = bColor;
}
// 赤と黄の縦線を描く。
for ( var t = y0; t <= y1; t++ ) {
ary[ x0 + t * dt ] = rColor;
ary[ x1 + t * dt ] = yColor;
}

// 中央を黒い四角形で塗る。
for ( t = y0 + 1; t < y1; t++ ) {
for ( s = x0 + 1; s < x1; s++ ) {
ary[ s + t * dt ] = bkColor;
}
}

image = new SFImage ( dt, dt, 3, ary );

}
"
}

ROUTE Sc.image TO PT.image