[papervision3d]*Step2*GeometryObject3Dクラス [Edit]


むらけんです。
いや~遂にCS3日本発売日も来月に決定し、米国版のトライアウト版も先日ダウンロード可能となりました。そして、明日はF-siteセミナーです。160人会場で立ち見が出そうな位大入です。来られる方はよろしくです。
さて、papervision3d第三回です。
今回からは早速ですがソースファイルはCS3版とさせていただきます。

球体をクリックしてみてください。そうすると。。。

import caurina.transitions.Tweener;
import org.papervision3d.core.proto.*;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
// _______________________________________________________________________
//                                                                    vars
var container : Sprite;
var scene     : MovieScene3D;
var camera    : FreeCamera3D;
var sphereObj:DisplayObject3D;
var togeFlag:Boolean=false;
// _______________________________________________________________________
//                                                             Constructor
ptest();
function ptest():void{
    stage.frameRate = 60;
    stage.quality   = "MEDIUM";
    stage.scaleMode = "noScale";
    stage.align = StageAlign.TOP_LEFT;
    this.addEventListener(Event.ENTER_FRAME, _enterframe);
    this.stage.addEventListener(Event.RESIZE, onStageResize);
    init();
}
// _______________________________________________________________________
//                                                                    Init
function init():void{
    //コンテナ生成
    container = new Sprite();
    addChild(container);
    container.x = this.stage.stageWidth  / 2;
    container.y = this.stage.stageHeight / 2;
    //シーン生成
    scene = new MovieScene3D( container );
    //カメラ設定
    camera=new FreeCamera3D(1,1000);
    //オブジェクト生成

    var material  : ColorMaterial;

    material = new ColorMaterial(0x000000, 0.5);
    //material.doubleSided = true;
    material.lineColor = 0xcccccc;
    material.lineAlpha = 1;

    sphereObj = new Sphere(material,100,16,16);
    scene.addChild(sphereObj);
    for each(var i:* in sphereObj.geometry.vertices) {
        i.extra={baseX:i.x,baseY:i.y,baseZ:i.z}
    }
    sphereObj.container.buttonMode=true;
    sphereObj.container.addEventListener(MouseEvent.MOUSE_DOWN,toge);
}
// _______________________________________________________________________
//                                                                   Event
function _enterframe(e:Event):void{
    sphereObj.rotationY+=container.mouseX/100;
    sphereObj.rotationX+=container.mouseY/100;
    this.scene.renderCamera( camera );
}
function toge(e:MouseEvent){
    var num:Number=1;
    for each(var i:* in sphereObj.geometry.vertices) {
        if(num%6==0){
            if(!togeFlag){
                Tweener.addTween( i, {
                    x            :i.extra.baseX*4,
                    y            :i.extra.baseY*4,
                    z            :i.extra.baseZ*4,
                    time        :2,
                    delay       :Math.random(),
                    transition    :"easeOutElastic"
                    } );
            }else{
                Tweener.addTween( i, {
                x            :i.extra.baseX,
                y            :i.extra.baseY,
                z            :i.extra.baseZ,
                time        :2,
                delay       :Math.random(),
                transition    :"easeOutElastic"
                } );
            }
        }
        num++;
    }
    togeFlag=!togeFlag;
}
// _______________________________________________________________________
//                                                           onStageResize
function onStageResize(e:Event):void{
    this.container.x = this.stage.stageWidth  / 2;
    this.container.y = this.stage.stageHeight / 2;
}
GeometryObject3Dクラスを使用することで、頂点座標のコントロールが可能になります。
頂点座標達は、geometry.verticesに配列として格納されています。

コンパイルにはFlash CS3及び papervision3dとTweenerのクラスライブラリが必要です。
ソースはこちら

▽免責事項▽
 このサンプルを使用した場合、または使用できなかった等のいかなる損害も、
 制作者 むらけん 及び F-site は、その責を負いません。
 ご自身の責任においてご使用ください。

コメント

この記事へのコメント

  1. 1.metalalive(2009年09月24日 12:09)

    looking good~!

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事