Home > papervision3d > TweenerでPapervision3DのSphereをトゲトゲにする

TweenerでPapervision3DのSphereをトゲトゲにする

前回のエントリ「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);
    }
  }
}
関連のありそうなエントリ

Comments:0

Comment Form
Remember personal info

*
To prove that you're not a bot, enter this code
Anti-Spam Image

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

Home > papervision3d > TweenerでPapervision3DのSphereをトゲトゲにする

Search
Feeds
Meta

Return to page top