• 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/

  • 相关阅读:
    Centos7.3安装和配置Tomcat8
    Centos7.3安装和配置jre1.8
    -bash: /home/java/jdk1.8.0_221/bin/java: 权限不够
    Centos7安装vsftp服务
    CENTOS之文件搜索命令Find
    Centos之文件搜索命令locate
    DockerFile体系结构(保留字指令)
    DockerFile解析
    SpringBoot项目映射
    穿透,让你不再限制内网的约束【远程控制内网电脑】【3389端口】
  • 原文地址:https://www.cnblogs.com/njflash/p/2886945.html
Copyright © 2020-2023  润新知