全景图的播放原理是构建三维场 景·在场景中创 建柱体’或者球体'立方体等三维物体。将削做 好的全景照片做为物体材
质贴在虚 拟的三维球体表面'或者将转换过的6张1.1 的-照片贴在三维立方体表面。 将虚拟摄像机放置在球体或立方体的 体
心位置 鼠标拖动时转动虚拟摄像机 或.者 转动三雏体I以 此来实现奎景图的 播放。对于漫游的实现 经过特定位置添加热。最
.蔷击热点后进行切换场 景即切凄是三维球体表萄 贴图来 实现:i ¨1 j 。。 。j j
360项目中 所使用的Krpano viewer是一款基于Flash的全景图播放和漫游软件。 anoviewer的全部功能都是经过对其
l关联的xnd文件的 解析来实现的誊其所捷供的各类插件也经过配置xH1l文件来调用。
一
、Krpano功能介绍
Krpano viewer的主程序所使用的XML文件十分简洁.默认状况下仅能够作到场景的载入。其余全部功能,都以插件的
形式实现.而每一个插件.既能够在本身的XML文件进行配置。 而后供主程序XML文件调用.也能够在主程序的XML文件
中直接b[<plugin>标签引入并进行配置。这样作的好处就是功
能明确,结构清晰,便于扩展,利于维护。
Krpano的全部标签以下:
<inelude>标签:载人其余的xml文件。
<preview>标签:在装载全景图片的过程当中显示一个小的
全景图。
html
<image>标签:载人图片。 <view>标签:存储当前视的信息。 <area>标签:定义全景图中被展现的区域 <display>标签:定义渲染的质量和性能。 <control>标签:鼠标键盘的控制设置。 <cursois>标签:自定义光标的样式。 <autorotate>标签:当无用户交互时.自动扭曲/移动,缩放。 <plugin>标签:载人其余flash程序,图片或者按钮,图标 等。 <hotspot>标签:设置热点。 <events>标签:设置事件的响应。 <aetion>标签:定义行为.须要用脚本语言解释器解释。 <eontextmenu>标签:自定义鼠标右键菜单。 <progress>标签:设置装载时过程。 <network>标签:设置下载或者decode时的图片。 <memory>标签:设置内存使用状况。 <security>标签:设置安全性。 <textstyle>标签:定义样式。 <lensflareset>标签:定义一个镜头光晕样式。 <lensflare>标签:定义一个镜头光晕。 <data>标签:存储一些数据 <scene>标签:定义场景。
Krpano viewer的功能是十分强大和复杂的.本文只介绍
系统所用到的几个比较重要的标签
=、校园全景漫游的具体实现
2.一、将krpano viewer嵌入html网页
Krpa~o Viewer提供了swfkrpano.is脚本 使用它能够很方
便地将krpano viewer嵌入html网页.其使用方法以下:
首先引人脚本文件:<script src="swfkrpano.J⋯S></script>
接着编写iavascript脚本:
java
<script type=”text/javaseript”> vat swf=ereateswf(”krpano.swf'’,”krpanoSWFObject”,” 100%”,”100% ”); swf.addVariable(”xml”,”scenes-with-imagemap.xml”); swf.embed(”krpanoDIV” : swf.addVariable(”xml”,”krpano.xml”); </script>
此段代码的说明为:Var swf=ereateswf0表示能够建立要
嵌入的对象
swf.addVariable0表示设置xml文件的路径
swf.embed(”krpanoDIV”1表示将krpano viewer嵌入到html
元素里。
2.二、设置初始场景
在配置文件中的根节 <krpano>中添加脚本动做.设置初
始要载人的场景
<kroano version=”1.0.8”onstart=”loadscene(scene1.null。
MERGE);p1aysound(s1,sound/music.mp3,0,o);”>
onstart为Krpano定义的事件.其后跟随的内容为事件的
响应脚本。Loadscene函数表示载入场景.其第一参数为场景名
称。Playsound函数是音频播放插件所提供。其第二个参数为要
播放的音频文件的路径。
2-3构建各个场景
本系统全部的场景信息都保存在XML文件中。当须要载
人某个场景时,系统会查找相应的标签,读取配置。在XML配
置文件中.使用<scene>标签构建场景。具体示例以下:
<scene name=”scenename”onstart=’。action(startscene);”>
<scene>标签后的name属性是必须的,同时.做为场景的
标识.其值必须是全局惟一的。onstart属性后跟脚本动做代码,
表示在场景刚载入时要作的工做。本例中,onstart属性后为一
个名为startscene的动做 这个动做中包含一系列的脚本代码
来完成一些工做,具体以下:
编程
<action name=”startscene”> set(heading,90); showtext([b】要显示的字符 】,infostyle); action(activatespot,scene3,190); playsound(s1,sound/sound.mp3,0,o); </action>
每一个action的name属性值同<scene>标签的n踟e属性一
样,也是必需而且全局惟一的.其做用相似于C#语言中的方
149
法名.方便脚本编程时进行调用
在startscene这个动做中.首先设置了视角进入时的水平
位置。
在<scene>标签之中,使用<image>标签载人全景图.其代
码以下:
<image type=”SPHERE”><sphere url=”全景图片路径”/><
/image>
本方案使用的是球面全景图,因此设置tvpe属性为
sphere。~<sphere>标签中的ud属性中设置要加载的全景图片
的路径
在每一个场景中都有若干热点与相邻场景进行互联.点击
热点后能够实现场景跳转。要定义一个热点.须要使用<
hotspot>标签。与其余标签相似.在<hotspot>标签中,也须要对
各个属性进行设置
2_4设置地图
在展现性项目中.导航地图能够使用户方便地知道当前
场景的位置,是必不可少的。本项目导航地图的实现.是在
krpano提供的插件功能和脚本编程语言基础上自行实现的
地图.以及地图上的热点,都是做为插件存在的。它们的动态
特性.是经过脚本编程实现的。设置地图的代码以下:
安全
<plugin name=”map”url=”scenes/map.JPg”keep ”true” align=”righttop”x=”一480”y=”0”alpha=”0.8”handeursor=”false’’ sealechildren=”true”width=”480”height=”360”/><plugin>
<plugin>标签的url属性设置要载入的地图图片的路径。
编程语言
X.v属性设置地图插件在屏幕上所出现的位置。alpha设置图片的透明度。width与height属性设置地图插件的宽高。当场景跳转时.若是跳转后的场景与前一个场景位于同一地图中.地图不会变化.若是进入到了新的地图场景中.地图会自动更换 地图显示,也能够隐藏,能够经过点击导航图按钮实现。 函数
2.5设置地图上的热点
为了标明系统全部场景在地图上的位置和当前场景的位
置.须要使用地图热点。
每一个场景在地图上具备对应的热点标出 表明当前场景
的热点,其图标与其余场景不一样,以示区别。同时,点击某个热
点。也会跳转到相应的场景中。
这些场景热点也是经过插件方式实现的 每一个热点都是
一个插件.经过设置插件属性实现其各类功能.其配置以下:
<plugin name=”插件名”ur1=”插件所用图片的地址”
keep=’’true”parent=’’map’’align=’’left”edge=’’center”x=”162’’
v:”495”z0rder:=”2”onhover="showtext(想要显示的场景信息)I,
onclick=”loadscenefscenel,null,MERGE,BLEND(1));/>
其中naine属性设置插件名.这是一个全局惟一的名称
url设定默认的供热点使用的图片的路径。parent属性设置插
件的父插件名称
2.6设置按钮
按钮的做用.一般是点击后出发事件.进而执行一系列的
动做。在krpano中,附带有预约义的按钮,能够实现系统预约
义的功能。也能够使用krpano强大的插件和脚步编程功能.白
定义按钮
K_~pano预约义的按钮主要包括:全屏,左转,右转,上转,
下转,全屏,鼠标样式转换。其功能的实现也是依靠脚本语句..
这些预约义的功能被单独写在一个配置文件中.krpano的主
配置文件用<include>标签包含这个配置 同时也要注意修改
相关的图片路径。使用方法以下:<include url="butt0n/buttons—
png—include.xml”/>。
在引用预约义的按钮配置时.要注意预约义的配置文件
和配置文件所引用的文件的相对路径.避免出现错误
在本项目中,除了使用预设的按钮外,还须要两个按钮.
一个是声音播放按钮,一个是地图显示按钮 采用krpano的插
件和脚步功能实现。声音播放按钮的代码为:
<plugin name=”sndl”url=”sound/soundonof.png”align=”
leftbottom”x=”10”y=”5”alpha=”0.6”scale=”1.0”keep=”true’’
onover=”tween(alpha,1);”onout=”tween(alpha,0.6);”crop=”0101501
50”onclick=”switch(soundinterface.mute);switch(crop,010150150,
01501501501;”/>
Onclick属性设置了关闭或者打开soundinterface插件 、默
认为播放,当点击后声音中止,而且图标改变为关闭方式,再
次点击,播放声音,图标变为播放方式。Crop属性的四个值:0l
0150150,表示在加载的图片的0,0位置起,宽50高50裁切出一
个图片,供当前使用。也就是说,能够把好几个图标整合在一
张图片上,使用时,调用Crop脚本函数,提供要切割的起始坐
标,要切割图片的宽高。
地图按钮的代码为:
<plugin name=”showmap”keep=”true”url=”daohang.png”
visible=”true”align=”rightbottom”onclickA=”set(state,,A,);tween
(plugin[map].X,0%);”oncliekB=”set(state,"B3;tween(plugin[map].x,
一480);”onclick=”if(state=:,A ,onclickB0,onclickA0);”y=”5”/
>
参考文献:
fl】赵庆展,赵欣,常静.虚拟校园全景漫游系统的实现[J].石河
子大学学报,2006,f11
[2】邬厚民.利用鱼眼技术构建全景漫游系统的方法探索『J1.电
脑知识与术.2009(18)
f31杨琳,赵建民,朱信忠,徐慧英,郑国强.虚拟校园=三维全景
漫游技术研究 计算机工程与科学,2007,(10)
150
性能
须要软件,或者全景交流的朋友能够加群 290188608 很久没有来看博客,对于要软件的朋友我会尽快发给大家的,也能够加群索取url