Away3D基础教程(一):创建可鼠标交互的基本几何对象

转动的平面,鼠标点击后反方向转动
 
 

重点:

View3D(视口): 这是整个3D世界的入口,犹如透过一个窗口看世界,Away3D中View3D类就是这个窗口,你可以在Flash中同时添加多个View3D实例,就好像在一面墙上砸出多个窗户一样,每个View3D实例可以指向同一个Scene3D,也可以指向不同的Scene3D,但请记住,即使所有的View3D都指向同一个Scene3D实例,也会造成性能的下降,所以通常情况下,我们只使用一个View3D实例。

Scene3D(场景): Scene3D就是窗户外的风景,每一个View3D(视口)都有一个默认的Scene3D(场景),它在Flash的作用类似于Stage,所有的3D对象都需通过它来addChild,才能被显示出来,你也同样可以同时实例化多个Scene3D实例,但每个View3D每次只能被分配一个Scene3D。

Geometry(几何形状): 在Away3D中,Geometry类其实就是一个数据对象,它被用来保存3D物体的基础数据,如顶点(vertices),法线(normals),UV数据,我们从外部加载进来的模型文件会被解析成一个Geometry实例并被保存在内存中。

Mesh(网格): Mesh是一个容器,如果我们为它设置形状数据和贴图后,我们就可以在场景中看到它,它可以是一个方块,一个圆球,也可以是一个如汽车或楼房这样的复杂模型,当然,它也可以仅仅只是一个点,一根线条,或是一个平面,一切取决于它所包含的Geometry数据内容。

Material(材质): 我们也可以将它称之为贴图,基本的贴图分三种,颜色贴图,照片贴图和线框贴图(线框贴图仅针对于线框类型对象使用),我们还能为贴图设置透明度和灯光反射强度,以此来达到一些特殊效果。

Camera3D(镜头): Camera3D就相当于你的眼睛,睛,如果移动Camera3D的坐标就相当于你的眼睛在移动,但....如果移动Scene3D里的物体坐标呢?.....那就说明那个物体在移动......= =!

Mesh(网格): Mesh是一个容器,如果我们为它设置形状数据和贴图后,我们就可以在场景中看到它,它可以是一个方块,一个圆球,也可以是一个如汽车或楼房这样的复杂模型,当然,它也可以仅仅只是一个点,一根线条,或是一个平面,一切取决于它所包含的Geometry数据内容

package  

{

    import away3d.containers.View3D;

    import away3d.entities.Mesh;

    import away3d.events.MouseEvent3D;

    import away3d.materials.TextureMaterial;

    import away3d.primitives.PlaneGeometry;

    import flash.display.Sprite;

    import flash.events.Event;

    import flash.events.MouseEvent;

    import flash.geom.Vector3D;

    import flash.display.*;

    import away3d.utils.Cast;

    

    /**

     * ...

     * @author yl

     */

    [SWF(width='800',height='600',frameRate="60", backgroundColor="0x000000")]

    public class MyAway3d_1 extends Sprite 

    {

        //floor的贴图图片

        [Embed(source = "../embeds/myAway3d_1.jpg")]

        private static var FloorMaterial:Class;

        //创建视口

        private var _view:View3D;

        //创建平面几何对象

        private var _planeGeometry:PlaneGeometry;

        //创建平面几何对象的容器

        private var _planeMesh:Mesh;

        //控制旋转方向的变量

        private var _direction:Boolean;

        

        public function MyAway3d_1() 

        {

            //侦听舞台初始化完毕

            if (stage) {

                init();

            }else {

                this.addEventListener(Event.ADDED_TO_STAGE, init);

            }

        }

                

        private function init(e:Event=null):void {

            //trace("舞台初始化完成!");

            //设置舞台缩放模式和对齐方式

            stage.scaleMode = StageScaleMode.NO_SCALE;

            stage.align = StageAlign.TOP_LEFT;

            this.removeEventListener(Event.ADDED_TO_STAGE, init);

            

            //实例化视口

            _view = new View3D();

            addChild(_view);

            //设置抗锯齿参数

            _view.antiAlias = 2;

            

            //实例化一个长宽都是300的平面对象

            _planeGeometry = new PlaneGeometry(300, 300);

            //实例化平面几何对象的容器,第一个参数是平面几何对象,第二个参数是贴图数据

            _planeMesh = new Mesh(_planeGeometry, new TextureMaterial(Cast.bitmapTexture(FloorMaterial)));

            //设置容器可交互

            _planeMesh.mouseEnabled = true;

            //容器侦听鼠标点击事件

            _planeMesh.addEventListener(MouseEvent3D.CLICK, clickHandler);

            

            //将容器添加到视口的场景中

            _view.scene.addChild(_planeMesh);

            

            //设置摄像机的位置

            _view.camera.z = -400;

            _view.camera.y = 260;    //可以把这个值改成1试试看,这样可以有更加直观的感受

            //_view.camera.x = 90;

            //设置摄像机始终指向平面

            _view.camera.lookAt(_planeMesh.position);

            //_view.camera.lookAt(new Vector3D());

            

            this.addEventListener(Event.ENTER_FRAME, onEnterFrame);

            stage.addEventListener(Event.RESIZE, onResize);

            onResize();

        }

        

        private function clickHandler(e:MouseEvent3D):void {

            //鼠标点击变换运动方向

            _direction = !_direction;

        }

        

        private function onResize(e:Event = null):void {

            //调整视口尺寸以适应新的窗口大小

            _view.width = stage.stageWidth;

            _view.height = stage.stageHeight;

        }

        

        private function onEnterFrame(e:Event):void {

            //判断方向旋转

            if (!_direction) {

                _planeMesh.rotationY += 1;

            }else {

                _planeMesh.rotationY -= 1;

            }

            //渲染3D世界

            _view.render();

        }

        

    }



}

Away3D开发包下载地质:http://away3d.com/download/

你可能感兴趣的:(对象)