- 2007-08-24 0:07
- papervision3d
前回のエントリ「TweenerでPapervision3Dのオブジェクトを生きている様に拡大・縮小する」ではPlaneの頂点を移動し、生き物の様に拡大する方法をご紹介しました。
今回はその応用でSphereをトゲトゲにします。
ちょっとクリックしにくいですが、ワイヤーの部分をクリックするとトゲトゲになります。
トゲトゲ状態でワイヤーをクリックするともとに戻ります。
Sphereオブジェクト
今回のSphereオブジェクトの設定です。
//マテリアル設定 material = new WireframeMaterial( 0x999999 ); material.doubleSided = true; //オブジェクト生成 obj = new Sphere(material, size, segment, segment); rootNode.addChild(obj);
このSphereオブジェクトの頂点を移動させてトゲトゲにします。
ただし、全部の頂点を移動すると球が拡大するだけなので、一定間隔で頂点を移動します。
頂点の移動
では一定間隔で頂点を移動します。
単純に12の倍数です。12という数字に根拠はなく、やってみて良さそうな形になったので…。
var num:Number = 1; for each(var i:* in obj.geometry.vertices) { if(num%12 == 0) { Tweener.addTween(i, { x:i.x*3, y:i.y*3, z:i.z*3, time:4, delay:Math.random(), transition:"easeInOutElastic" }); } }
Source Code
package { import flash.display.*; import flash.events.*; import org.papervision3d.core.proto.*; import org.papervision3d.scenes.*; import org.papervision3d.objects.*; import org.papervision3d.cameras.*; import org.papervision3d.materials.*; import caurina.transitions.*; [SWF( backgroundColor="0xffffff", frameRate="45" )] public class TweenSphere extends Sprite { private var container : Sprite; private var scene : Scene3D; private var camera : Camera3D; private var rootNode : DisplayObject3D; private var obj : DisplayObject3D ; //オブジェクト private var size : int = 100;//オブジェクトの長さ private var segment : int = 16; //面の分割数 private var material : MaterialObject3D; private var isTween : Boolean; //--------------------------------------------Constructor public function TweenSphere():void { //ステージ this.stage.quality = "MEDIUM"; this.stage.scaleMode = "noScale"; this.stage.align = StageAlign.TOP_LEFT; this.stage.addEventListener(Event.ENTER_FRAME, loop); this.stage.addEventListener(Event.RESIZE, resize); //コンテナ生成 container = new Sprite(); container.x = this.stage.stageWidth / 2; container.y = this.stage.stageHeight / 2; addChild(container); //シーン生成 scene = new Scene3D(container); //rootNode生成 rootNode = new DisplayObject3D("rootNode"); scene.addChild(rootNode); //マテリアル設定 material = new WireframeMaterial( 0x999999 ); material.doubleSided = true; //オブジェクト生成 obj = new Sphere(material, size, segment, segment); rootNode.addChild(obj); //camera設定 camera = new Camera3D(); camera.z = -size*3; camera.focus = 300; camera.zoom = 1; //Tweenの状態フラグ isTween = false; //イベントリスナの登録 container.addEventListener(MouseEvent.CLICK, clickObj); } //--------------------------------------------loop private function loop(event:Event):void { // 回転 obj.rotationY += container.mouseY / 100; obj.rotationX += container.mouseX / 100; //再レンダリング scene.renderCamera(camera); } //--------------------------------------------stage private function resize(e:Event):void{ container.x = this.stage.stageWidth / 2; container.y = this.stage.stageHeight / 2; } //--------------------------------------------mouse click private function clickObj (e:MouseEvent):void { var num:Number = 1; for each(var i:* in obj.geometry.vertices) { if(num%12 == 0) { if(isTween) { Tweener.addTween(i, { x:i.x/3, y:i.y/3, z:i.z/3, time:1, delay:0, transition:"easeInOutElastic" }); } else { Tweener.addTween(i, { x:i.x*3, y:i.y*3, z:i.z*3, time:4, delay:Math.random(), transition:"easeInOutElastic" }); } } num++; } isTween = !isTween; scene.renderCamera(camera); } } }
関連のありそうなエントリ
- Newer: Papervision3D Rev1.5のColorMaterialのlineColorプロパティのバグを修正する
- Older: TweenerでPapervision3Dのオブジェクトを生きている様に拡大・縮小する
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://www.adamrocker.com/blog/147/papervision3d_sphere_using_tweener.html/trackback/
- Listed below are links to weblogs that reference
- TweenerでPapervision3DのSphereをトゲトゲにする from throw Life
