#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 128 # テクスチャの1辺のピクセル数
field SFColor colA 0.3 1.0 0.3 # 円の内側の色
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 col0 = SFColor2Int ( colA );
var col1 = SFColor2Int ( colB );
var ary = new MFInt32 ();
// 円の半径 r を dt の半分とする。
var r = dt / 2;
var rr = r * r;
var q = 0;
// テクスチャーの左下から順番に、全ピクセルに対して円の内外に位置するか否かを調べて塗り分ける。
for ( var y = 0; y < dt; y++ ) {
var y0 = y - r;
var yy = y0 * y0;
for ( var x = 0; x < dt; x++ ) {
var x0 = x - r;
var xx = x0 * x0;
if ( rr > xx + yy ) ary[q++] = col0;
else ary[q++] = col1;
}
}
image = new SFImage ( dt, dt, 3, ary );
}
"
}
ROUTE Sc.image TO PT.image