[Papervision3D]Papervision3D2.0のドキュメント発見 [FlashPlayer10]お尻プルルン

Now loading...

5 月 17

数日前にFlash Player 10(Astro)のベータ版が発表されて新機能や新クラスの話題でFlash界隈は盛り上がってるみたい。DisplayObjectのプロパティに新しくz軸が追加されて3D描画が可能になった。とはいっても今まで自分で設定しなくちゃいけなかった焦点距離の計算が省けただけなのかな?単純にdrawRect()するだけではdepth sortingやbackface cullingまではしてくれないみたい。僕も色々調べ中。とりあえずFlash Player 10 で 3Dしてみた (Unknown Quality)を参考に3Dやってみた。参考元はFlex SDK 3.0.1より前のものを使用しているのでパブリッシュに色々トリック(astro::って部分等)を使ってるみたいだけど、現在はFlash Player 10用にパブリッシュできるFlex SDK 3.0.1.xが配布されているので気にしなくてよい。

[FLASH 10]My First Astro
[FLASH 10]My First Astro (再生にはFlash Plaeyer 10が必要)

[関連リンク]

一応ソースコード。rotationXとかあるよね。

package {
    /*
    * Requires Flex SDK 3.0.1.x to be compiled
    */
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;

    [SWF(width="550",height="400",backgroundColor="0×0")]

    public class Main extends Sprite{

        //size of the box
        private const SIZE:Number = 100;

        public function Main(){
            var spr:Sprite = new Sprite();
            spr.x = stage.stageWidth/2;
            spr.y = stage.stageHeight/2;
            addChild(spr);
            makeCube(spr,0x005885);
            spr.addEventListener(Event.ENTER_FRAME,rotate);
        }

        private function makeCube(s:Sprite,c:uint):void{
            //front
            var f1:Shape = new Shape();
            f1.graphics.lineStyle(2,c);
            f1.graphics.drawRect(0,0,SIZE,SIZE);
            f1.x = -SIZE/2;
            f1.y = -SIZE/2;
            f1.z = -SIZE/2;
            s.addChild(f1);

            //back
            var f2:Shape = new Shape();
            f2.graphics.lineStyle(2,c);
            f2.graphics.drawRect(0,0,SIZE,SIZE);
            f2.x = -SIZE/2;
            f2.y = -SIZE/2;
            f2.z = SIZE/2;
            s.addChild(f2);

            //left
            var f3:Shape = new Shape();
            f3.graphics.lineStyle(2,c);
            f3.graphics.drawRect(0,0,SIZE,SIZE);
            f3.rotationY = 90;
            f3.x = -SIZE/2;
            f3.y = -SIZE/2;
            f3.z = SIZE/2;
            s.addChild(f3);

            //right
            var f4:Shape = new Shape();
            f4.graphics.lineStyle(2,c);
            f4.graphics.drawRect(0,0,SIZE,SIZE);
            f4.rotationY = 90;
            f4.x = SIZE/2;
            f4.y = -SIZE/2;
            f4.z = SIZE/2;
            s.addChild(f4);

            //top
            var f5:Shape = new Shape();
            f5.graphics.lineStyle(2,c);
            f5.graphics.drawRect(0,0,SIZE,SIZE);
            f5.rotationX = 90;
            f5.x = -SIZE/2;
            f5.y = -SIZE/2;
            f5.z = -SIZE/2;
            s.addChild(f5);

            //bottom
            var f6:Shape = new Shape();
            f6.graphics.lineStyle(2,c);
            f6.graphics.drawRect(0,0,SIZE,SIZE);
            f6.rotationX = 90;
            f6.x = -SIZE/2;
            f6.y = SIZE/2;
            f6.z = -SIZE/2;
            s.addChild(f6);
        }

        private function rotate(e:Event):void{
            const DUMP:Number = 0.25;
            var dx:Number = (mouseX - stage.stageWidth/2);
            var dy:Number = (mouseY - stage.stageHeight/2);
            e.target.rotationY = -dx*DUMP;
            e.target.rotationX = dy*DUMP;
        }
    }
}

Related posts:

Tags:

Now loading...

Title Link:

Trackback URL:

Leave a Reply