查看: 2068|回复: 0
打印 上一主题 下一主题

Away3d材质实战——旋转的地球

[复制链接]

435

主题

2

听众

6371

积分

高级设计师

Rank: 6Rank: 6

纳金币
6372
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2012-9-4 16:02:29 |只看该作者 |倒序浏览
使用现有的flash player API能够实现三维旋转的地球,但是比较麻烦,主要使用的是flash player10新增加的绘图API drawTriangles,这里我使用Away3d来实现旋转的地球。
Away3d能使用多种材质,都在Away3d.materials.*包里面,这个包里面有不下20种材质,它能够使用位图、视频、外部swf文件以及线框等等来作为材质。而且在使用swf作为材质时,还能够保有其交互性,可以说是只有你想不到,没有你做不到。但是不同的材质对系统需求不同,毫无疑问,视频文件以及swf文件作为材质消耗系统资源要比位图、线框材质多一些,废话少说下面看代码(地球的贴图文件我会传上来,大家可以试试):







    package   
    {  
        import away3d.cameras.HoverCamera3D;  
        import away3d.containers.View3D;  
        import away3d.core.utils.Cast;  
        import away3d.materials.BitmapMaterial;  
        import away3d.primitives.Sphere;  
         
        import flash.display.Sprite;  
        import flash.events.Event;  
         
        /**  
         * ...  
         * @author aisajiajiao  
         * 旋转的地球  
         */  
        public class MaterialDemo extends Sprite  
        {  
            //这是我机器上的文件路径,在自己实验的时候一定要确保路径正确  
            [Embed(source="../assets/map.jpg")]  
            private var Earth:Class;  
              
            private var _view:View3D;  
            private var _camera:HoverCamera3D;  
            private var _sphere:Sphere;  
            private var _material:BitmapMaterial;  
              
            public function MaterialDemo()   
            {  
                //配置摄像机  
                _camera = new HoverCamera3D();  
                //Camera的仰角,单位度而非弧度,默认为0  
                _camera.tiltAngle = 10;  
                //Camera在y轴上的旋转角度,默认为0单位也是度  
                _camera.panAngle = 180;  
                //摄像头与指定目标之间的距离,默认是800  
                _camera.distance = 1000;  
                  
                _view = new View3D();  
                _view.x = stage.stageWidth / 2;  
                _view.y = stage.stageHeight / 2;  
                _view.camera = _camera;  
                addChild(_view);  
                  
                //使用Cast类将位图数据转化为BitmapData数据,Cast类是工具类,使用很方便实现各种数据之间的转化  
                //当然你可以使用原生的Bitmap类来获得BitmapData数据.  
                _material = new BitmapMaterial(Cast.bitmap(Earth));  
                  
                _sphere = new Sphere();  
                _sphere.radius = 200;  
                //设置分段数  
                _sphere.segmentsH = 20;  
                _sphere.segmentsW = 20;  
                //设置材质,将地球贴图复制给球体  
                _sphere.material = _material;  
                //添加至舞台  
                _view.scene.addChild(_sphere);  
                  
                addEventListener(Event.ENTER_FRAME, onEnterFrame);  
            }  
              
            private function onEnterFrame(e:Event):void  
            {  
                //下面一句被注释掉了,它确保的是地球自身在旋转(自西向东转)  
                //_sphere.rotationY--;  
                //hover()函数在每一帧上刷新显示,使之产生动画,如果将其注释,则不会产生动画,大家可以试试  
                _camera.hover();  
                //根据鼠标的位置旋转地球  
                _camera.panAngle += (stage.mouseX - stage.stageWidth / 2)/60;  
                _view.render();  
            }  
              
        }  
      
    }  











分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-9-22 01:14 , Processed in 0.270738 second(s), 29 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部