浅谈热点坐标与观看位置的关系

问题其实很简单,就是我们如何知道查看全景时,我们所看到的位置正处于某个热点附近,也就是这个热点已经很接近画面的中央。

要解决这个问题,我们就要理解热点坐标athatv以及观看位置view.hlookatview.vlookat

ath和atv是hotspot元素本身的属性,它们定义了热点元素在球形全景中的位置,ath是定义水平方向的位置,数值在-180到180之间,atv是定义垂直方向的位置,数值在-90到90之间。

 

当我们把球形全景按照特定的立方体展开后,我们所看到的屏幕的中央点位置就是view.hlookat、view.vlookat,它们的数值范围和刚才的热点坐标是一致的。

热点坐标如果不动态更改的话,通常是固定的。也就是ath和atv就固定了,但因为我们的全景是要旋转的,因此画面中央的view.hlookat、view.vlookat肯定是动态变化的,因此当这四个数值,也就是view.hlookat与ath相同,view.vlookat与atv相同时,热点就处于画面中央了。

因此这样就回到我们的问题,如何检查当前位置是否接近热点。krpano提供了一个相关的action。

获取球面全景中两个坐标之间的距离。

参数:

  • result
    将两个坐标之间的距离记录的变量
  • toH
    要到达的水平坐标值,可以是数值或变量名
  • toV
    要到达的垂直坐标值,可以是数值或变量名
  • fromH (可选)
    出发坐标的水平坐标值。如果没有定义,则使用view.hlookat。
  • fromV (o可选
    出发坐标的垂直坐标值。如果没有定义,则使用view.vlookat。

 

我们可以看到通过onviewchanged事件是一个在视域发生变化后进行的事件,因此可以用于视角变化类的动作。

testhotspots这个action里,我们用

来检查当前观看位置与每个热点的相对距离,如果距离少于7,则激发其它action。