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;//鼠標移出場景爲假
}
}
}