package { import caurina.transitions.Tweener; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Plane; public class planeSphere extends DisplayObject3D { // 半径、planeの幅と高さ、planeの枚数を保持する変数 public var radius:int=0; public var planeW:int=0; public var planeH:int=0; public var planeN:int=0; // コンストラクタ public function planeSphere(rad:int=0, pH:int=0, pW:int=0) { // 各変数を設定 radius=rad; planeH=pH; planeW=pW; // planeの円配置の位置を生成、保存 var H:int=(2 * radius * Math.PI) / 2 / planeH; var sheeta1:Number; var sheeta2:Number=90; for(var i:int=0; i < H; i++) { sheeta1=0; var pn:int=Math.floor((2 * radius * Math.cos(sheeta2 * Math.PI / 180) * Math.PI) / planeW); for(var j:int=0; j < pn; j++) { var mat:ColorMaterial=new ColorMaterial(Math.floor(Math.random() * 0xFFFFFF), 0.4); mat.interactive=true; var plane:Plane=new Plane(mat, planeW, planeH); plane.material.doubleSided=true; var rx:int=-sheeta2; var ry:int=sheeta1; var xx:int=radius * Math.cos(sheeta2 * Math.PI / 180) * Math.sin(sheeta1 * Math.PI / 180); var yy:int=radius * Math.sin(sheeta2 * Math.PI / 180); var zz:int=radius * Math.cos(sheeta2 * Math.PI / 180) * Math.cos(sheeta1 * Math.PI / 180); plane.extra={x:xx, y:yy, z:zz, rx:rx, ry:ry}; // 円をばらす plane.x=xx * 500; plane.y=yy * 500; plane.z=zz * 500; plane.rotationX=rx; plane.rotationY=ry; addChild(plane, "plane" + planeN.toString()); sheeta1+=360 / pn; planeN++; } sheeta2-=180 / H; } } // 円を生成する関数 public function makeSphere():void { for(var i:int=0; i < planeN; i++) { var plane:Plane=Plane(getChildByName("plane" + i.toString())); Tweener.addTween(plane, {x:plane.extra.x, y:plane.extra.y, z:plane.extra.z, rotationX:plane.extra.rx, rotationY:plane.extra.ry, time:7}); } } } }