krpano网页地址链接到指定场景和视角

有这么一种情况,假设我们用三个场景,这三个场景恰好是一条街道的同一方向的三个拍摄点。如上图。

我们可以通过设置A、B、C三个场景中的view元素中的hlookat属性,实现了从A到B、从B到C保持同一个方向。假设我们的图是左东右西的方向。那我们站在A点面向B的方向,我们会看到链接到B的热点,当我们点击该热点时,初始视角应该还是面向东方,也就是能看到更远处的链接到C的热点。简单来说,保持了方位的统一。


问题来了,当我们从C回到B,或者从B回到A时,进入场景的时候初始视角还是面向东方,而不是面向西方,这样就没有保持方位的统一。如何在krpano的默认热点中实现方位的统一呢?

krpano默认生成热点的代码控制分为两个部分,一个是tour.xml中的每个hotspot元素,一个是在vtourskin.xml中对应的名为skin_hotspotstyle的style元素。

tour.xml中某个热点:

  1. <hotspot name=”spot1″ style=”skin_hotspotstyle” ath=”200.496″ atv=”10.890″linkedscene=”scene_a1kt” />
  2. vtourskin.xml中的style:
  3. <style name=”skin_hotspotstyle” url=”vtourskin_hotspot.png” scale=”0.5″ edge=”top” oy=”0″distorted=”false”
  4.  
  5. tooltip=””
  6.  
  7. onclick=”if(linkedscene, skin_hidetooltips(); tween(scale,0.25,0.5); tween(oy,-20,0.5); tween(alpha,0,0.5); looktohotspot(); loadscene(get(linkedscene),null,get(skin_settings.loadscene_flags),get(skin_settings.loadscene_blend)); skin_updatescroll(); );”
  8. onloaded=”if(skin_settings.tooltips_hotspots, if(linkedscene, copy(tooltip,scene[get(linkedscene)].title); loadstyle(skin_tooltips); ));”
  9.  
  10. />

当然,指定到特定的场景这个是没有问题的,本来热点就是指定到某个场景的。基本上我们要指定一个新的hlookat值。因此我们对hotspot的部分,例如是从C回到B时的热点,也就是在C场景中,linkedscene为B的热点:

  1. <hotspot name=”spot1″ style=”skin_hotspotstyle” ath=”200.496″ atv=”10.890″linkedscene=”scene_B” hlookat=”200″ />

 
可以看到我们加了一个hlookat=”200″,这个就是我们从C进入到B时的初始视角。该值的获取可以使用options插件。

然后我们将style改为:

  1. <style name=”skin_hotspotstyle” url=”vtourskin_hotspot.png” scale=”0.5″ edge=”top” oy=”0″distorted=”false”
  2.  
  3. tooltip=””
  4.  
  5. onclick=”if(linkedscene, skin_hidetooltips(); tween(scale,0.25,0.5); tween(oy,-20,0.5); tween(alpha,0,0.5); looktohotspot(); loadscene(get(linkedscene),null,get(skin_settings.loadscene_flags),get(skin_settings.loadscene_blend)); skin_updatescroll();if(hlookat,lookat(get(hlookat),get(view.vlookat),110)); );”
  6.  
  7. onloaded=”if(skin_settings.tooltips_hotspots, if(linkedscene, copy(tooltip,scene[get(linkedscene)].title); loadstyle(skin_tooltips); ));”
  8.  
  9. />

其实这里我们是在onclick事件中的if中增加了一个

  1. if(hlookat,lookat(get(hlookat),get(view.vlookat),110));

THE END
喜欢就支持一下吧
点赞2
分享
评论 抢沙发