使用Three JS将链接或“热点”放置在equirectangular全景图内

时间:2016-02-02 08:41:22

标签: javascript html5 three.js

我正在寻找详细的教程或示例或关于如何在带有Three.js的equirectangular全景图中放置链接的良好文档。

使用equirectangular panorama demo,学习如何在一张图片的一部分放置一个圆圈或任何类型的对象,点击它可以打开另一个equirectangular全景图或其他任何东西,真是太棒了。

我需要哪些技术才能进行研究?我需要注意哪些依赖项?我还需要哪些其他类似的库?

我认为,如果不使用一些名为“hotsposts”的昂贵的全景观众,就可以做到这种乖。不,我想自己学习这个,以及我自己能够编码的内容。任何人都可以购买插件,但我想学习如何做到这一点。

因为我对Three.js很新,并且非常喜欢它,所以我真的只是在寻求研究的指针或事物。我不介意这需要时间和精力。他们说没有痛苦没有收获。但我的问题是,由于我是这个领域的初学者,我甚至不知道从哪里开始或研究什么条款。

例如,我正在查看documentation of Three.js,并想知道我需要查找或了解的条款。我也很好地了解了有关SO的类似问题,并看到它们链接了clickable objects example。这是我需要在equirectangular全景中简单地链接吗?

我真的很高兴得到一些关于我想要做的事情的术语或技术例子。例如,this blog post确实帮助我理解了equirectangular全景图的基础知识。如果有类似的东西有关添加链接到equirectangular全景将是伟大的。

你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

全景图通过天空盒/立方体贴图呈现,这可能意味着两件事。

在任何一种情况下,它都涉及6张图像,没有失真(因此你可以通过像ptgui之类的东西将你的2:1扭曲图像转换成6个方形图像)。

Read on cubemaps

现在,这可以像天空盒一样简单。这六个图像被映射到网格,立方体 - 六个平面,并且该立方体总是与相机的位置对齐,即。相机总是从立方体的中心渲染立方体。 three.js中唯一需要的魔法就是将.renderOrder设置为首先渲染,并将depthWrite设置为false,以免影响其他对象的渲染(即它无限远)。

//do for every face (plane)
myCubeMapFaceMaterial = new THREE.MeshBasicMaterial({
  map:cube.up.jpg, 
  depthWrite:false
});

示例显示的另一个是在着色器中执行实际的textureCube提取。该示例抽象了这一点,您只需从库中获取立方体着色器,然后将其应用于多维数据集。这样你就可以避免制作6个平面,6个不同的材质(6个绘制调用),但是加载一个立方体贴图结构(three.texture)并让三个在一个绘图调用中在着色器中读取它。

现在假设您在场景中的任何位置添加球体。由于天空盒从未写过深度,它似乎不存在,它只是以某种方式为你的背景着色。你接下来绘制的任何东西都将被绘制在它上面(在立方体内部),如果它比立方体范围远得多,则无关紧要,没有深度信息,因此它不会进行任何测试。

这是你的光盘。你可以随心所欲,放置粒子系统,将精灵对准相机,制作3d东西,背景保持背景。