note.x

[Away3D] HelloAway3D

とりあえず何か表示させるための基本を押さえる。
svnリポジトリの trunk > examples > HelloAway3D 超基本サンプルがあるんだけど、かなり以前のリビジョンベースのままずっと放置されてて、Away3D2.0だとコンパイルエラーになる。なんという一見さんお断りっぷり。
動くようにしたのが下記。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package
{
    import flash.display.*;
    import flash.events.*;
    import flash.utils.*;
 
    import away3d.containers.*;
    import away3d.primitives.*;
    import away3d.materials.*;
 
    [SWF(backgroundColor="#222266", frameRate="60", width="600", height="400")]
    public class HelloAway3D extends Sprite
    {
        public var view:View3D;
        public var sphere:Sphere;
 
        public function HelloAway3D()
        {
            view = new View3D();
            view.x = 300;
            view.y = 200;
            addChild(view);
 
            var wcMat:WireColorMaterial = new WireColorMaterial(0xFF7700, {wirecolor:0xCC4400})
            sphere = new Sphere({material:wcMat, radius:250, segmentsW:12, segmentsH:9, y:50});
 
            view.scene.addChild(sphere);
            view.camera.lookAt(sphere.position);
 
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
 
        private function onEnterFrame(event:Event):void
        {
            view.render();
            sphere.rotationY = getTimer() / 100;
        }
 
    }
}
  • とくにかくView3Dを生成する。
  • View3Dオブジェクトに内包される形で、scene と camera が生成される。そこだけ承知しとけばPV3Dと流れは変わらない。
  • View3D.render()でレンダリング。
  • View3Dと、PV3DのViewport3Dは似て非なるものなので注意。

view.scene とか、view.camera とかいう記述がイマイチしっくりこないんで、もうちょっとPV3Dライクに。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package
{
    import flash.display.*;
    import flash.events.*;
 
    import away3d.containers.View3D;
    import away3d.cameras.TargetCamera3D;
    import away3d.primitives.Sphere;
    import away3d.materials.WireColorMaterial;
 
    [SWF(backgroundColor="#000000")]
 
    public class Away3DBasic extends View3D
    {
        private var sphere:Sphere;
 
        public function Away3DBasic()
        {
            stage.frameRate = 60;
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.quality = StageQuality.MEDIUM;
 
            stage.addEventListener(Event.RESIZE, onStageResize);
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
 
            //View3D init
            var targetCamera:TargetCamera3D = new TargetCamera3D();
            super({camera:targetCamera, x:stage.stageWidth/2, y:stage.stageHeight/2});
 
            //Camera Setting
            camera.z = -2500;
            camera.focus = 500;
            camera.zoom = 12;
 
            //Material Setting
            var wcMat:WireColorMaterial = new WireColorMaterial(0x0099CC, {wirecolor:0x00CCFF});
 
            //3DObject Setting
            sphere = new Sphere({material:wcMat, radius:100, segmentsW:12, segmentsH:9});
            scene.addChild(sphere);
        }
 
        //Render Loop
        private function onEnterFrame(event:Event):void
        {
            //rotation Sphere
            sphere.rotationY += 0.5;
 
            //Rendering
            render();
        }
 
        private function onStageResize(event:Event):void
        {
            this.x = stage.stageWidth >> 1;
            this.y = stage.stageHeight >> 1;
        }
 
    }
}

※最近のリビジョンで、上記のようにView3Dを継承する方法を使うと、MouseEvent3Dが正常に働かなくなるので、やらない方が無難。

View3Dの定義時に、わざわざTargetCamera3Dを設定してるのは、デフォルトのCamera3DがPV3DでいうところのFreeCamera3Dだから。動作確認のためのデモをゴリゴリ作る場合は、カメラがワールド原点注視しっぱなしのほうが個人的に楽なので。


Trackback URL : http://blog.r3c7.net/as3-software-rendering/180/trackback/

Leave a Reply