<?xml version="1.0" encoding="UTF-8"?>
<X3D>
<Scene>
<Viewpoint/>
<NavigationInfo
type='"EXAMINE"'
/>
<!-- 箱 -->
<Shape>
<Appearance>
<PixelTexture DEF='PT'/>
</Appearance>
<Box/>
</Shape>
<!-- テクスチャー作成スクリプト -->
<Script DEF='Sc'>
<field accessType='outputOnly' type='SFImage' name='image'/>
<field accessType='initializeOnly' type='SFInt32' name='dt' value='64'/>
<field accessType='initializeOnly' type='SFColor' name='red' value='1 0.3 0.3'/>
<field accessType='initializeOnly' type='SFColor' name='grn' value='0.3 1 0.3'/>
<field accessType='initializeOnly' type='SFColor' name='blu' value='0.3 0.3 1'/>
<field accessType='initializeOnly' type='SFColor' name='yel' value='1 1 0.2'/>
<field accessType='initializeOnly' type='SFColor' name='blk' value='0 0 0'/>
<field accessType='initializeOnly' type='SFColor' name='colB' value='0.5 0.2 0.2'/>
<![CDATA[ecmascript:
// 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 );
}
]]>
</Script>
<ROUTE fromNode='Sc' fromField='image' toNode='PT' toField='image'/>
</Scene>
</X3D>