PV3D实景虚拟漫游技术的实现(8)
时间:2016-11-23 20:48 来源:毕业论文 作者:毕业论文 点击:次
本课题使用立方体型的360度全景图像生成,要取得具有摄影真实感的全景图像,需采用全景照相机、普通照相机来获取图像数据。全景照相机可直接获得全景图像,普通照相机则需要固定在可水平旋转的支架上,使得相机的镜头位于支架的中心点,转动照相机一周,每间隔一定的角度拍一张照片,以保证相邻照片有一定的重叠,所得到的图像数据属于中心投影,还要经过投影变换来将这些中心投影图像投影到一个圆柱面上。完成这种柱面的正投影变换后,再经过拼接形成柱面全景图像,整个拼接过程分成图像匹配和平滑连接两个步骤完成。 图像匹配是确定相邻图像的重叠范围,一般有基于面积和基于特征等方法,平滑连接使得拼接区域色调变化平滑,提高了图像质量。可采用淡入淡出的方法,即在重叠部分由前一幅图像慢慢地过渡到第二幅图像并删去垂直方向错开的图像部分。 全景图像生成后,空间编辑器将不同地点而又众多的全景图像组织为虚拟的全景空间,全景图像的数据量通常是较为庞大的,需要对其进行压缩,通常采用EG算法进行压缩。虚拟全景空间漫游时,一般只将可见部分的全景图像调人内存并解压,通过柱面全景图像的反投影算法,将可见部分的柱面图像反投影为中心投影图像并显示在计算机屏幕上。 图 2.1 虚拟全景空间生成流程图 2.4.2 照片的拼接技术 如何将拍摄得到的照片,拼接成一张在平面上看上去拥有很宽广视角很宽广的范围将使得生成全景展示地图的时候能还原当时拍摄的真实景象。可以通过两种方法,一是利用软件的自动拼接,二是通过手动的裁剪。 2.4.3 Flash技术 全景图制作中一个最重要的步骤就是实现移动化,这就需要借助Flash中的一组类包,来实现Flash 3D的效果。 首先去网上下载这个类包,然后安装这个类包,按下CTRL+U,出现下面的对话框,选择Action Script栏,然后选择Actionscript3.0设置。 之后使用PV3D引擎,注意使用时有五个基本的要素,container,scene,camera,material和object,所以在as的开头,先要把这些包导入,具体如下: import org.papervision3d.scenes.*; import org.papervision3d.cameras.*; import org.papervision3d.materials.*; import org.papervision3d.objects.*; 先新建一个container; var container:Sprite = new Sprite( ); container.x=stage.stageWidth/2; container.y=stage.stageHeight/2; addChild(container); 然后新建一个scene和camera; var scene:MovieScene3D = new MovieScene3D(container); var camera:Camera3D = new Camera3D( ); camera.zoom=5; 之后建立一个material,在此新建的是一个BitmapAssetMaterial,可以载入库里的bitmap对象。 var btm:BitmapAssetMaterial = new BitmapAssetMaterial("cover"); btm.oneSide=false; btm.smooth=true; 注意object,Plane型,包里还有很多的object,如stars,sphere,cube等等。 var plane = new Plane(btm,234,236,2,2); 把这个object添加到scene中去。 scene.addChild(p); 最后把摄像机架好。 scene.renderCamera(camera); 这样一个见的PV3D应用就完成了,然后将架摄像机的那部分代码修改如下 addEventListener(Event.ENTER_FRAME,handler); function handler(e:Event){ p.rotationX+=5; scene.renderCamera(camera); } 2.4.4 界面交互及热点导航的设计技术 这一部分,属于设计部分,原则上要遵循人机友好的原则,以人为本,从用户的角度去考虑该如何进行界面设计及颜色的艺术搭配。对此,在技术范围,需要用到Flash软件技术,比如,进行帧的创建、遮罩层、元件与影片剪辑及按钮的设计、加入动作代码、添加控制脚本等。 (责任编辑:qin) |