pic_circle_0_00.x3d source
<?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='128'/>
<field accessType='initializeOnly' type='SFColor' name='colA' value='0.3 1 0.3'/>
<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 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 );

}
]]>
</Script>

<ROUTE fromNode='Sc' fromField='image' toNode='PT' toField='image'/>
</Scene>
</X3D>