Forked from: sakef's PV3Dその5 Planeを球体っぽく並べるのをPV3Dで。 diff:1 forked from: PV3Dその5 Planeを球体っぽく並べるのをPV3Dで。 前作ったのをPV3Dで。 画面をクリックするとPlaneが球体に配置されます。 yoppe forked:1favorite:0lines:105license : All rights reserved modified : 2009-02-10 10:26:25 Embed Tweet // forked from sake's PV3Dその5 Planeを球体っぽく並べるのをPV3Dで。 /* 前作ったのをPV3Dで。 画面をクリックするとPlaneが球体に配置されます。 */ package { import caurina.transitions.Tweener; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import org.papervision3d.cameras.Camera3D; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.render.BasicRenderEngine; import org.papervision3d.scenes.Scene3D; import org.papervision3d.view.Viewport3D; [SWF(width="465", height="465", backgroundColor="0xffffff", frameRate="40")] public class PV3D_sample06 extends Sprite { private var container:Sprite; private var viewport:Viewport3D; private var scene:Scene3D; private var camera:Camera3D; private var renderer:BasicRenderEngine; private var rootNode:DisplayObject3D; private var sphereNode:DisplayObject3D; private var flug:int; private var planeN:int; private const radius:int = 50; private const planeH:int = 5; private const planeW:int = 5; public function PV3D_sample06() { container=new Sprite(); addChild(container); container.x=stage.stageWidth / 2; container.y=stage.stageHeight / 2; viewport=new Viewport3D(0, 0, true, true); scene=new Scene3D(); camera=new Camera3D(); renderer=new BasicRenderEngine(); rootNode=scene.addChild(new DisplayObject3D("rootNode")); sphereNode=rootNode.addChild(new DisplayObject3D("sphereNode")); addChild(viewport); camera.y=50; camera.zoom=50; camera.focus=50; camera.target=DisplayObject3D.ZERO; viewport.containerSprite.buttonMode = true; var H:int=(2 * radius * Math.PI) / 2 / planeH; var sheeta1:Number; var sheeta2:Number=90; flug = planeN = 0; 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.random()*0xFFFFFF, 0.3); 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}; sphereNode.addChild(plane, "plane" + planeN.toString()); sheeta1+=360 / pn; planeN++; } sheeta2-=180 / H; } for(var i:int=0; i < planeN; i++) { var plane:Plane = sphereNode.getChildByName("plane" + i.toString()) as Plane; plane.x=Math.floor(Math.random() * 600) - 300; plane.y=Math.floor(Math.random() * 600) - 300; plane.z=Math.floor(Math.random() * 600) - 300; plane.rotationX=Math.random() * 360; plane.rotationY=Math.random() * 360; plane.rotationZ=Math.random() * 360; } stage.addEventListener(MouseEvent.CLICK, mouseClick); addEventListener(Event.ENTER_FRAME, onFrame); } private function mouseClick(e:MouseEvent):void { stage.removeEventListener(MouseEvent.CLICK, mouseClick); for(var i:int=0; i<planeN; i++) { var plane:Plane = sphereNode.getChildByName("plane" + i.toString()) as Plane; Tweener.addTween(plane, {x:plane.extra.x, y:plane.extra.y, z:plane.extra.z, rotationX:plane.extra.rx, rotationY:plane.extra.ry, rotationZ:0, time:5}); } flug = 1; } private function onFrame(e:Event):void { if (flug == 1) { sphereNode.rotationX += 1.5; sphereNode.rotationY += 1.5; } renderer.renderScene(scene, camera, viewport); } } } Code Fullscreen Preview Fullscreen container scene viewport getChildByName Math.floor Math.PI BasicRenderEngine Viewport3D extra toString doubleSided MouseEvent.CLICK buttonMode renderScene DisplayObject3D.ZERO target Math.cos rotationZ zoom focus sort new page view favorite forked pv0 forked from: forked from: PV3D.. kosukeozawa forked:0 favorite:0lines:105 (diff:1)