使用threejs来生成全景的方式,网上已经有很多大佬介绍过了,大致分为两种,一种是使用球体+1张全景图,另一种使用立方体+6张环境贴图
今天使用更简的方式,使用现成的库来实现,Panolens已经帮我们把three中初始化场景、相机、控制器、鼠标事件等操作都封装好了,我们只需要关注图片即可
github地址
github.com/pchen66/pan…
pchen66.github.io/panolens.js…
npm install panolens
import * as PANOLENS from 'panolens'
three中的那些初始化相机、渲染器、鼠标事件、控制器等操作,只需要new PANOLENS.Viewer
即可完成
this.viewer_main = new PANOLENS.Viewer({
container: document.getElementById(this.domId),
output: 'console'
其余的参数可参考文档
pchen66.github.io/panolens.js…
生成球体全景
使用ImagePanorama
两行代码,一个球体全景就生成了
this.panorama_main_image = new PANOLENS.ImagePanorama('static/img/panoramic/lake5000x2500.jpg')
this.viewer_main.add(this.panorama_main_image)
生成立方体全景
使用CubePanorama
const cube = new PANOLENS.CubePanorama([
'static/img/sand/px.png',
'static/img/sand/nx.png',
'static/img/sand/py.png',
'static/img/sand/ny.png',
'static/img/sand/pz.png',
'static/img/sand/nz.png'
this.viewer_main.add(cube)
场景中添加标识点
首先要获取标识点位置
指定位置的输出方式
开启outputPosition方法
this.viewer_main = new PANOLENS.Viewer({
.....
output: 'console'
.....
this.viewer_main.add(cube)
this.viewer_main.outputPosition()
开启outputPosition方法后,按住ctrl,可输出鼠标的位置
按住ctrl把鼠标放到想要添加标识的位置,控制台会打印位置,记录下位置
添加标识点
使用Infospot
对象
const infospot1 = new PANOLENS.Infospot(350, PANOLENS.DataImage.Info)
infospot1.position.set(2851.10, -1651.58, -5000.00)
infospot1.addHoverText('石头')
infospot1.addEventListener( 'click', function(){
cube.add(infospot1)
使用场景的link
方法,来添加切换按钮
this.viewer_main.add(this.panorama_main_image)
this.viewer_main.add(cube)
this.panorama_main_image.link(cube, new THREE.Vector3(-3260.34, -700.96, -3017.16))
cube.link(this.panorama_main_image, new THREE.Vector3(-3260.34, -700.96, -3017.16))
因为panolens是基于three封装的,所以对于使用过three的小伙伴上手会快些
文本只介绍了panolens.js的基本操作,其实还有很多玩法,也可以使用视频,有兴趣的小伙伴可以查看文档根据自己需求去设置学习