#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