查看: 2602|回复: 5
打印 上一主题 下一主题

用Away3D 制作的旋转图象

[复制链接]

435

主题

2

听众

6371

积分

高级设计师

Rank: 6Rank: 6

纳金币
6372
精华
0

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

跳转到指定楼层
楼主
发表于 2012-8-29 16:50:02 |只看该作者 |倒序浏览

看了些FlashMagazine上的Flash效果,感觉超酷的。其中有些也用到了3D引擎。这个3D旋转图象是我在看了些Away3D的教程后做的。



附加我的源代码

package

{

    import away3d.cameras.HoverCamera3D;

    import away3d.containers.*;

    import away3d.core.base.*;

    import away3d.core.math.*;

    import away3d.events.*;

    import away3d.primitives.*;

   

    import flash.display.Sprite;

    import flash.events.Event;

    import flash.events.MouseEvent;

   

    [SWF(width="1000", height="600")]

    public class ImageBox extends Sprite

    {

        private var view:View3D;

               

        private var camera:HoverCamera3D;

        private var lastMouseX:Number;

        private var lastMouseY:Number;

        private var lastPanAngle:Number;

        private var lastTiltAngle:Number;

        private var move:Boolean = false;

        

        [Embed (source="resources/1.jpg")]

        private var tex1:Class;

        [Embed (source="resources/2.jpg")]

        private var tex2:Class;

        [Embed (source="resources/3.jpg")]

        private var tex3:Class;

        [Embed (source="resources/4.jpg")]

        private var tex4:Class;

        

        public function ImageBox()

        {

            super();

            //设定view,camera        

            camera = new HoverCamera3D({zoom:9, focus:200, distance:1000});

            view = new View3D({camera:camera,x:500, y:300});

            addChild(view);

            camera.lookAt( new Number3D(0, 0, 0) );

            camera.targetpanangle = camera.panangle = 45;

            camera.targettiltangle = camera.tiltangle = 10;

            camera.mintiltangle = -90;

            

            //前面的画面

            var fPlanelane = new Plane({material:tex1,width:200,height:200,bothsides:***e});

            makePlane(0,0,100,90,180,fPlane);

            view.scene.addChild(fPlane);

            

            //左边的画面

            var lPlanelane = new Plane({material:tex2,width:200,height:200,bothsides:***e});

            makePlane(100,0,0,90,-90,lPlane);

            view.scene.addChild(lPlane);

            

            //右边的画面

            var rPlanelane = new Plane({material:tex3,width:200,height:200,bothsides:***e});

            makePlane(-100,0,0,90,90,rPlane);

            view.scene.addChild(rPlane);

            

            //后面的画面

            var bPlanelane = new Plane({material:tex4,width:200,height:200,bothsides:***e});

            makePlane(0,0,-100,90,0,bPlane);

            view.scene.addChild(bPlane);

            

            //增加事件监听

            addEventListener(Event.ENTER_FRAME, onEnterFrame);

            view.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

            view.addEventListener(MouseEvent.MOUSE_UP, mouseUp);

        }        

        

        private function onEnterFrame(e:Event):void

        {   

            //旋转速度控制

            var cameraSpeed:Number = 0.3;

            //MouseDown事件触发时

            if (move) {

                //水平方向旋转

                camera.targetpanangle = cameraSpeed*(stage.mouseX - lastMouseX) + lastPanAngle;

                //垂直方向旋转

                camera.targettiltangle = cameraSpeed*(stage.mouseY - lastMouseY) + lastTiltAngle;

            //自动旋转

            } else {

                camera.targetpanangle = cameraSpeed + camera.targetpanangle;

            }

            //渲染

            camera.hover();

            view.render();        

        }

        

        private function mouseDown(event:MouseEvent):void

        {

            lastPanAngle = camera.targetpanangle;

            lastTiltAngle = camera.targettiltangle;

            lastMouseX = stage.mouseX;

            lastMouseY = stage.mouseY;

            move = ***e;

        }

        

        private function mouseUp(event:MouseEvent):void

        {

            move = false;

        }

        

        private function makePlane(x:int,y:int,z:int,rotationX:int,rotationY:int,planelane):void {

            plane.x = x;

            plane.y = y;

            plane.z = z;

            plane.segmentsH = 2;

            plane.segmentsW = 2;

            plane.rotationX = rotationX;

            plane.rotationY = rotationY;

        }

        

    }

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

使用道具 举报

.    

3797

主题

11

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
32328
精华
41

活跃会员 优秀版主 荣誉管理 论坛元老

沙发
发表于 2012-8-30 11:50:42 |只看该作者
回复

使用道具 举报

10

主题

3

听众

760

积分

初级设计师

Rank: 3Rank: 3

纳金币
3
精华
0

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

板凳
发表于 2012-8-31 08:42:03 |只看该作者
继续加油
回复

使用道具 举报

2508

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32806
精华
12

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

地板
发表于 2012-11-2 09:19:33 |只看该作者
回复

使用道具 举报

.    

3797

主题

11

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
32328
精华
41

活跃会员 优秀版主 荣誉管理 论坛元老

5#
发表于 2012-11-8 21:25:41 |只看该作者
这是一个好帖子,大家快来围观!!
回复

使用道具 举报

.    

3797

主题

11

听众

5万

积分

首席设计师

Rank: 8Rank: 8

纳金币
32328
精华
41

活跃会员 优秀版主 荣誉管理 论坛元老

6#
发表于 2012-11-8 21:25:59 |只看该作者
这是一个好帖子,大家快来围观!!
回复

使用道具 举报

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

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

GMT+8, 2024-9-22 10:03 , Processed in 0.404230 second(s), 30 queries .

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

© 2008-2019 Narkii Inc.

回顶部