krpano课堂(肥宗) · 2015-07-13 19:32

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

我们可以通过设置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_hotspotstylestyle元素。

tour.xml中某个热点:

 

<hotspot name="spot1" style="skin_hotspotstyle" ath="200.496" atv="10.890"linkedscene="scene_a1kt" />

vtourskin.xml中的style:

 

<style name="skin_hotspotstyle" url="vtourskin_hotspot.png" scale="0.5" edge="top" oy="0"distorted="false"

tooltip=""

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(); );"

onloaded="if(skin_settings.tooltips_hotspots, if(linkedscene, copy(tooltip,scene[get(linkedscene)].title); loadstyle(skin_tooltips); ));"

/>

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

 

<hotspot name="spot1" style="skin_hotspotstyle" ath="200.496" atv="10.890"linkedscene="scene_B" hlookat="200" />

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

然后我们将style改为:

 

<style name="skin_hotspotstyle" url="vtourskin_hotspot.png" scale="0.5" edge="top" oy="0"distorted="false"

tooltip=""

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)); );"

onloaded="if(skin_settings.tooltips_hotspots, if(linkedscene, copy(tooltip,scene[get(linkedscene)].title); loadstyle(skin_tooltips); ));"

/>

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

 

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

意思就是如果存在hlookat,那么就使用lookat这个action,跳转到指定的位置。分别对应的是球面坐标中的水平和垂直位置以及视角fov

最新文章

  1. Ubuntu raid5+lvm实验
  2. XML--&gt;DTD&amp;Schema Notes
  3. 导入excel数据到数据库
  4. STL迭代器之一:偏特化
  5. WinForm开发框架--动态读取DLL模式
  6. Office文件上传自动生成缩略图
  7. HDU 4597 记忆化搜索
  8. css中的继承、层叠、样式优先级机制
  9. 浅谈javascript的变量作用域
  10. PCb过孔大小设置 / 丝印层字符尺寸设置
  11. C#使用 SQLite 数据库 开发的配置过程及基本操作类,实例程序:工商银行贵金属行情查看小工具
  12. C语言内存分配函数
  13. SQL语句一些特殊的用法
  14. UVA 12161 Ironman Race in Treeland
  15. swagger bug
  16. Nginx 慢启动与拥塞窗口
  17. 42)django-Model _meta API
  18. SpringBoot系列七:SpringBoot 整合 MyBatis(配置 druid 数据源、配置 MyBatis、事务控制、druid 监控)
  19. JavaScript动态加载CSS和JS文件
  20. Linux统计文件中单词出现的次数

热门文章

  1. MySQL查询所有库中表名
  2. DM8168通过GPMC接口与FPGA高速数据通信实现
  3. 完整Android开发基础入门博客专栏
  4. A - 移动的骑士
  5. web相关基础知识3
  6. 用户代理UA
  7. JAVA实现定时器功能
  8. BZOJ4567 SCOI2016背单词(trie+贪心)
  9. COGS 497——奶牛派对
  10. C# 获取ORACLE SYS.XMLTYPE &quot;遇到不支持的 Oracle 数据类型 USERDEFINED&quot;