Flex+pv3d 做三维全景图,需要找到一张全景照片,利用pv3d的立方体或球体贴图即可轻松实现。这里用的是球体,图片是在网上找的,有兴趣的朋友也可以自己做。



源码:

package {
 import flash.events.Event;
 import flash.events.MouseEvent;
 import org.papervision3d.cameras.CameraType;
 import org.papervision3d.objects.primitives.Sphere;
 import org.papervision3d.view.BasicView;
 import org.papervision3d.materials.BitmapFileMaterial;
   
   //设置舞台宽高、背景颜色、帧频
[SWF (width="460", height="300", backgroundColor="0xffffff", frameRate="30")]

 public class pv3dwholeScene extends BasicView
 {
       private var sphere:Sphere;
       private var w:Number=460;
       private var h:Number=300;
       private var angleX:Number;
       private var angleY:Number;
       private var over:Boolean=false;
       
       public function pv3dwholeScene()
     {
          super(460,300,true, false,CameraType.FREE);
          init();
      }
       private function init():void
      {
          initObj();

  //注册帧频侦听用于不断刷新屏幕
        addEventListener(Event.ENTER_FRAME,onEnterFrame);

  //当鼠标移到舞台时注册侦听
        stage.addEventListener(MouseEvent.MOUSE_OVER,onOver);

  //当鼠标移出舞台时注册侦听
        stage.addEventListener(MouseEvent.MOUSE_OUT,onOut);
      }

        private function initObj():void
        {
        var material:BitmapFileMaterial=new BitmapFileMaterial("images/yourImage.jpg");
       
  //PV3D默认情况下不显示背面,doubleSided属性应设为true
        material.doubleSided = true;
        material.smooth = true;
     
  //实例化球体 (由周长算出半径 S=2*PI*R)
        sphere=new Sphere(material,98.68,20,20);
        scene.addChild(sphere);

  //把摄像机移到中心位置,PV3D摄像机的默认位置是camera.z=-1000
        camera.z=0;

  //摄象机的缩放参数,
        camera.zoom=.8;

  //摄象机的焦距
        camera.focus=300;
 }
 
    private function onEnterFrame(e:Event):void
    {
 
     if(over)
     {
   //当over是真时设置摄像机的旋转角度
        var xm:Number=stage.mouseX;
        var ym:Number=stage.mouseY;
        angleX=(w/2-xm)*-.004;
        angleY=(h/2-ym)*-.002;
     }
     else
     {
   //当over是假时设置摄像机的旋转角度为0
        angleX=0;
        angleY=0;
      }
  // 旋转摄像机
        camera.yaw(angleX);
        camera.pitch(angleY);
  //渲染
        singleRender();
 }

 private function onOver(event:MouseEvent):void
 {
  over=true;//鼠标移到场景上为真
 }
 private function onOut(event:MouseEvent):void
 {
  over=false;//鼠标移出场景为假
 }

}

}
Tags: , ,
网站重构 » ActionScript | 评论(2) | 引用(0) | 阅读(3519)
ohehe
2009/09/11 12:51
2.1的pv3d里有BasicView
齐风
2009/07/21 10:50
您好!我把你的as文件放在AS工程里面,怎么报我找不到基类BasicView错误,是不是我的PV3D包不是最新的,还是你修改XXX...请帮我解决这个问题,谢谢!我的email:xiao.yong2007@yahoo.com
QQ:369100326
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]