在krpano的下载包中,有一个MAKE PANO (FLAT) droplet.bat,可以对单个平面照片生成渐进式的全景展示。使用非常简单,将高清平面图片直接拖拽到droplet图标上,松开,过一会儿,项目就生成好了。
现在问题来了,加入我们现在还要在这个图上面加热点,怎么做呢?似乎有点棘手。先来点预备知识。
全景图点坐标与球面坐标的关系
在全景图中某个点的X、Y坐标和全景漫游时该点在虚拟空间中atv、atv是存在某种线性关系的。
例如
ath = ((x / 全景图宽度) – 0.5) * hfov
atv = ((y / 全景图高度) – 0.5) * vfov
假设我们有一张8000*4000的全景图,那这个图的中点就是x,y(4000,2000),按照公式我们可以得出ath,atv都是0。也就是说全景图的中点是球面坐标的原点。hfov通常在圆柱形全景和球形全景都是360,vfov你可以从xml文件中获取或者手动计算。如果是完整的全景图,vfov则是180。
对球形全景
vfov = 360 * 全景图高度/全景图宽度对圆柱形全景
vfov = 360 * arctan( 全景图高度/全景图宽度* PI ) / PIarctan是反正切函数,PI是圆周率。
那么,krpano的平面全景实际上也是球面全景或圆柱体全景的一种,只是它的hfov值为1.0,也就是说在这个三维空间中只有1度宽,因此它是平的。
那么热点的ath和atv坐标也在这个范围内,当一个hfov为1.0的全景时其中热点应该是-0.5到0.5。
假设我的照片是4000*6000的尺寸,我要定的热点在平面图的坐标是x为2767,y为2784,那么
1 |
image-vfov = image-hfov * 图像高度 / 图像宽度 |
因为hfov为1.0,因此vfov为1.5。
1 2 |
ath = (原图的X坐标 / 图像宽度 - 0.5) * image-hfov atv = (原图的y坐标 / 图像高度 - 0.5) * image-vfov |
也就是
1 2 |
ath = (2767 / 4000 - 0.5) * 1.0 atv = (2784 / 6000 - 0.5) * 1.5 |
得到了ath是0.19175,然后atv是-0.054。
1 |
<hotspot name="abc" ath="0.19175" atv="-0.054" url="vtourskin_mapspot.png" zoom="true" scale="0.01"/> |
注意这里要用zoom的话,scale要设为一个很小的数值。
另外,如果想拖拽全景时有scrollarea的感觉,使用
1 |
<view hlookatmin="-0.5" hlookatmax="0.5" limitview="fullrange" /> |