技术研究之全景展示

标签: 无 分类: 未分类 创建时间:2025-12-23 09:39:06 更新时间:2026-05-27 11:42:29

1.前沿

大疆无人机可以执行全景任务,进行全景拍摄,生成一张全景图片,所以在我们的无人机平台上,就要有一个全景查看这个功能。早年间我好像使用过 krpano Panorama Viewer ,但是后来也忘记了。

参考文章:
【1】.krpano Panorama Viewer 这里是用的 krpano Panorama Viewer 查看器。
【2】.一款好用的720度全景图实时查看器-酷点全景查看器2 这里用的是一个自己开发的软件,可以导出全景。
【3】.krpano全景入门指南 这是一个入门指南,好像可以进行开发。krpano是一个可以实现定制化全景项目的根据,很多在线可视化全景平台都是基于krpano开发而来。它本身不开源,商用需要付费购买,否则会有水印,购买方式读者可在官网自行了解。
【4】.Krpano结合threejs的例子

2.可选方案

根据大模型给出的建议

  • Three.js + Panolens.js
  • Pannellum
  • Photo Sphere Viewer
  • A-Frame
参考文章:
【1】.全景组件Pannellum解析与实践
【2】.webVR全景图多种方案实现(pannellum,aframe,Krpano,three,jquery-vrview) 这里作者对比了好几种方法,最后使用的是 krpano 加后台处理的方法。

3.Pannellum

这个是完全

4.代码

(1) 安装

1
pnpm add pannellum

(2) 加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<template>
<div class="pannorama-wrap">
<div ref="pannoramaViewRef" class="pannorama-view"></div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
import 'pannellum/build/pannellum.css'
import 'pannellum/build/pannellum.js'

const pannoramaViewRef = ref<HTMLElement | null>(null)
let viewer: any = null

onMounted(() => {
// 通过 window.pannellum 访问
const pannellum = (window as any).pannellum
if (!pannellum) {
console.error('Pannellum library not loaded')
return
}

if (pannoramaViewRef.value) {
viewer = pannellum.viewer(pannoramaViewRef.value, {
"type": "equirectangular",
"panorama": "https://pannellum.org/images/alma.jpg"
})
}
})

onUnmounted(() => {
if (viewer) {
viewer.destroy()
}
})
</script>
<style lang="less" scoped>
.pannorama-wrap{
width: 100%;
height: 100%;
}
</style>
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件(ititchuan@gmail.com)通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
ititchuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。