flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
讨论区





最近更新:
● 无语瓶阁下在教程区里 回复“《超简易papervision3D基础 ...”(18:09:44)
● payday loan阁下在教程区里 回复“《pv3d, sandy, away3d...”(05:56:23)
● bad credit payday loan阁下在教程区里 回复“《超简易papervision3D基础 ...”(05:56:13)
浏览主题:研究所 各位老师 谢谢了 偶来交作业~~

研究所 各位老师 谢谢了 偶来交作业~~
影子607 (2009-12-30 19:36:52)

这两天学pv3d 看了这里的不少教程
做了一个小练习 3d墙
(*^__^*) 嘻嘻…… 算是偶交的作业吧
非常感谢 希望再出新教程~
http://flash.9ria.com/viewthread.php?tid=42591&extra=


package {
     import flash.display.*;
     import flash.events.*;
     import flash.filters.*;
     import flash.net.URLLoader;
     import flash.net.URLRequest;
     import fl.transitions.Tween;
     import fl.transitions.easing.*;
     import flash.geom.Matrix;
     import flash.geom.Point;
     import flab3d.*;
     import org.papervision3d.events.InteractiveScene3DEvent;
     import org.papervision3d.events.FileLoadEvent;
     import org.papervision3d.view.Viewport3D;
     import org.papervision3d.materials.*;
     import org.papervision3d.objects.*;
     import org.papervision3d.objects.primitives.*;
     import org.papervision3d.render.BasicRenderEngine;
     import org.papervision3d.scenes.Scene3D;


     public class PicBall4 extends Sprite {
           private var viewport:Viewport3D;
           private var renderer:BasicRenderEngine;
           private var scene:Scene3D;
           private var camera:FlabCamera3D;

           private var OBJ_LENGTH:int=9;
           static private const CIRCLE_RANGE:int=550;
           private var speedx:Number=0;
           private var speedy:Number=0;
           private var wraps:DisplayObject3D;
           private var url:URLRequest=new URLRequest("pic.xml");
           private var urlLoader:URLLoader;
           private var xml:XML;
           private var n=0;//pic index
           private var isDown:Boolean=true;

           private var wrap:DisplayObject3D;
           private var rot:Number;
           private var m:BitmapFileMaterial;
           private var list:Array=[];

           public function PicBall4() {
                 viewport=new Viewport3D(550,400);
                 renderer=new BasicRenderEngine ;
                 scene=new Scene3D ;
                 camera=new FlabCamera3D ;
                 addChild(viewport);

                 stage.scaleMode=StageScaleMode.NO_SCALE;
                 stage.align=StageAlign.TOP_LEFT;
                 stage.quality=StageQuality.HIGH;

                 xmlLoad();

           }
           public function xmlLoad() {
                 urlLoader=new URLLoader ;
                 urlLoader.load(url);
                 urlLoader.addEventListener(Event.COMPLETE,onComplete);
                 urlLoader.addEventListener(IOErrorEvent.IO_ERROR,onError);
           }
           private function onComplete(evt:Event):void {
                 xml=XML(evt.target.data);
                 OBJ_LENGTH=xml.pic.length();


                 init();

           }
           private function onError(evt:IOErrorEvent):void {//XML加载出错
                 trace("配置文件加载失败");
           }
           public function init():void {
                 //camera.focus=300;
//                  camera.zoom=1;
//                  camera.x=0;
//                  camera.y=0;
//                  camera.z=1000;
                 camera.rotationX=5;
                 wrap=new DisplayObject3D ;
                 viewport.interactive=true;

                 for (var i:int=0; i                        var loader:Loader=new Loader ;
                       trace(xml.pic[i].@id.toString());
                       loader.load(new URLRequest(xml.pic[i].@id.toString()));

                       loader.contentLoaderInfo.addEventListener(Event.COMPLETE,Thumb_loaded);

                 }
                 addEventListener(Event.ENTER_FRAME,enterFrameHandler);
                 scene.addChild(wrap);
                 viewport.interactive=true;

           }

           private function Thumb_loaded(e:Event) {
                 ///////////
                 var file=e.target.loader;
                 var mc:MovieClip=new MovieClip ;
                 createRef(file,mc);

                 mc.addChild(file);

                 var movieMaterial:MovieMaterial=new MovieMaterial(mc);
                 movieMaterial.doubleSided=true;
                 movieMaterial.interactive=true;
                 trace("num",mc.numChildren);
                 rot=360*n/OBJ_LENGTH;
                 n++;
                 var o:Plane=new Plane(movieMaterial,300,300,2,2);
                 o.x=CIRCLE_RANGE*Math.sin(rot*Math.PI/180);
                 o.y=0;
                 o.z=CIRCLE_RANGE*Math.cos(rot*Math.PI/180);
                 o.rotationY=180+rot;
                 wrap.addChild(o);
                 o.addEventListener(InteractiveScene3DEvent.OBJECT_OVER,onInter1);
                 o.addEventListener(InteractiveScene3DEvent.OBJECT_OUT,onInter2);
                 o.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,onPlaneClick);
           }

           private function onPlaneClick(evt:InteractiveScene3DEvent):void {
                 isDown=! isDown;
                 if (isDown==false) {
                       trace(isDown)
                       camera.tweenTo(Plane(evt.currentTarget),0);
                 } else {
                       trace(isDown)
                       camera.tweenTo(Plane(evt.currentTarget),600);
                       //camera.resetToZero();
                 }
                 
           }

           private function onInter1(e:InteractiveScene3DEvent):void {
                 var my_tew1:Tween=new Tween(e.target,"scaleX",Elastic.easeOut,1,1.2,3,true);

                 var my_tew2:Tween=new Tween(e.target,"scaleY",Elastic.easeOut,1,1.2,3,true);

                 //e.target.scaleX=1.2;
                 //e.target.scaleY=1.2;
           }
           private function onInter2(e:InteractiveScene3DEvent):void {
                 var my_tew1:Tween=new Tween(e.target,"scaleX",Elastic.easeOut,1.2,1,3,true);

                 var my_tew2:Tween=new Tween(e.target,"scaleY",Elastic.easeOut,1.2,1,3,true);
                 //e.target.scaleX=1;
                 //e.target.scaleY=1;
           }
           private function enterFrameHandler(event:Event):void {
                 speedx=stage.mouseX>stage.stageWidth/2?1:-1;
                 if (stage.mouseX>stage.stageWidth/2-20&&stage.mouseX                        speedx=0;
                 }
                 wrap.yaw(speedx);
                 renderer.renderScene(scene,camera,viewport);
           }
           private function createRef(p_source:DisplayObject,mc:MovieClip):void {//倒影

                 var bd:BitmapData=new BitmapData(p_source.width,p_source.height,true,0);
                 var mtx:Matrix=new Matrix ;
                 mtx.d=-1;
                 mtx.ty=bd.height;
                 bd.draw(p_source,mtx);

                 var width:int=bd.width;
                 var height:int=bd.height;
                 mtx=new Matrix ;
                 mtx.createGradientBox(width,height,0.5*Math.PI);
                 var shape:Shape=new Shape ;
                 shape.graphics.beginGradientFill(GradientType.LINEAR,[0,0],[0.7,0],[0,0xFF],mtx);
                 shape.graphics.drawRect(0,0,width,height);
                 shape.graphics.endFill();
                 var mask_bd:BitmapData=new BitmapData(width,height,true,0);
                 mask_bd.draw(shape);
                 bd.copyPixels(bd,bd.rect,new Point(0,0),mask_bd,new Point(0,0),false);

                 var ref:Bitmap=new Bitmap ;
                 ref.y=p_source.height;
                 ref.bitmapData=bd;
                 ref.alpha=0.5;
                 mc.addChild(ref);
           }
     }
}



flash 3d 研究所 DDM君
(2009-12-30 20:43:32)
做的很不错的哟!基本的东西都用出来了。继续加油啊,影子君!

ps:这半年来研究所一直专注一个项目的开发,所以除了在下时常来解答一下各位的问题,其它很少有时间来写教程,我们真是非常的抱歉^^. 也希望项目能尽早完工。

flash 3d 研究所 影子607
(2009-12-30 21:09:29)
问个问题可以吗?
就是我做的这个3d照片墙
我原来想实现 点击图片实现图片放大 展示在眼前的效果
可是不知道如何旋转DisplayObject3D 或者 camera(角度)
大小总是控制不好
请教各位老师~~
谢谢

flash 3d 研究所 DDM君
(2010-01-01 14:06:36)
displayObject3D的旋转就是我们的教程里第二篇的内容,camera的寻转需要把target一起旋转。

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了