three.js实现vr全景图(vue)

news2024/12/28 19:37:49

方法: 可以利用Threejs中的立方体或者球体实现全景图功能,把立方体或球体当成天空盒子,将无缝衔接的图片贴上,看起来就像在一个场景中,相机一般放置在中央。
three.js中文网

1、立方体实现

立方体6个面要贴上6个方向的图片,这6个图片如下所示:
在这里插入图片描述
实现代码如下:

<template>
  <div>
    <div class="container"></div>
  </div>
</template>

<script>
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader'
export default {
  data() {
    return {
    }
  },
  mounted() {
    this.init()
  },
  methods: {
    init() {
      // 获取容器
      const container = document.querySelector('.container')
      // 初始场景
      const scene = new THREE.Scene()
      // 初始化相机
      const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
      // 相机位置
      camera.position.z = 5
      // 初始化渲染器
      const renderer = new THREE.WebGLRenderer()
      renderer.setSize(window.innerWidth, window.innerHeight)
      // 添加立方体
      const geometry = new THREE.BoxGeometry(10, 10, 10)
      let arr = ['4_l', '4_r', '4_u', '4_d', '4_b', '4_f']
      let boxMaterials = []
      arr.forEach(item => {
        // 纹理加载
        let texture = new THREE.TextureLoader().load(`./house/${item}.jpg`) // 这里图片的地址默认位置在public文件下方,所以测试的图片直接添加在public文件夹内部即可
        boxMaterials.push(new THREE.MeshBasicMaterial({ map: texture }))
      })
      const cube = new THREE.Mesh(geometry, boxMaterials)
      // 改变视角,进入立方体内部
      cube.geometry.scale(1, 1, -1)
      // 放置到场景上面
      scene.add(cube) 
      // 添加控制器,实现视角的缩放,旋转
      const controls = new OrbitControls(camera, container)
      // controls.enableDamping = true
      // 容器上面添加渲染器
      container.appendChild(renderer.domElement)
      // 逐帧渲染
      const circleRender = () => {
        renderer.render(scene, camera)
        requestAnimationFrame(circleRender)
      }
      circleRender()
    },
  }
}
</script>

<style>

</style>

图片的存放位置:
在这里插入图片描述

效果演示:

houseMovie

2、球体实现

下面这张图片将6个面合成到一张图片中,这样的图片也可以由球体来实现
在这里插入图片描述
代码实现:

<template>
  <div>
    <div class="container"></div>
  </div>
</template>

<script>
import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader'
export default {
  data() {
    return {
    }
  },
  mounted() {
    this.init()
  },
  methods: {
    init() {
      const container = document.querySelector('.container')
      // 初始场景
      const scene = new THREE.Scene()
      // 初始化相机
      const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
      // 相机位置
      camera.position.z = 5
      // 初始化渲染器
      const renderer = new THREE.WebGLRenderer()
      renderer.setSize(window.innerWidth, window.innerHeight)
      // 添加球体方式一:对于.hdr图片
      // const geometry = new THREE.SphereGeometry(5, 32, 32)
      // const loader = new RGBELoader()
      // // to do
      // loader.load('./images/prefix_hdr.hdr', (texture) => {
      //   const meterial = new THREE.MeshBasicMaterial({ map: texture })
      //   const sphere = new THREE.Mesh(geometry, meterial)
      //   sphere.geometry.scale(1, 1, -1)
      //   scene.add(sphere)
      // })

      // 添加球体方式二:对于.jpg .png图片
      const geometry = new THREE.SphereGeometry(5, 32, 32)
      const meterial = new THREE.MeshBasicMaterial()
      // 这里图片的地址默认位置在public文件下方,所以测试的图片直接添加在public文件夹内部即可
      let texture = new THREE.TextureLoader().load('./images/prefix.jpg')
      meterial.map = texture
      const sphere = new THREE.Mesh(geometry, meterial)
      // 改变视角,进入球体内部
      sphere.geometry.scale(1, 1, -1)
      scene.add(sphere)
      // 添加控制器,控制视角
      const controls = new OrbitControls(camera, container)
      // controls.enableDamping = true
      // 容器上面添加渲染器
      container.appendChild(renderer.domElement)
      // 逐帧渲染
      const circleRender = () => {
        renderer.render(scene, camera)
        requestAnimationFrame(circleRender)
      }
      circleRender()
    },
  }
}
</script>

<style>

</style>

图片的存放位置:
在这里插入图片描述
效果演示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/825729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 React 中渲染大型数据集的 3 种方法

随着 Web 应用程序变得越来越复杂&#xff0c;我们需要找到有效的方法来优化性能和渲染大型数据集。在 React 应用程序中处理大型数据集时&#xff0c;一次呈现所有数据可能会导致性能不佳和加载时间变慢。 虚拟化是一种通过一次仅呈现数据集的一部分来解决此问题的技术&#…

AIGC产业公司简况列表

最近梳理了国内外AIGC产业链相关的公司列表&#xff0c;如下图所示&#xff1a; 出自&#xff1a;AIGC产业公司简况列表 | 秋天的童话博客

ElementUI el-table 鼠标滚动失灵的问题及解决办法

Bug&#xff1a;ElementUI el-table 鼠标滚轮下滑动失灵的情况 我测出来的这个问题条件很苛刻&#xff0c;需要达到以下几个条件才会触发&#xff1a; 1.element plus&#xff08;其他版本没试&#xff09; 2.el-table-column组件有fixed属性时 3.template标签中有el-butto…

Adobe ColdFusion 反序列化漏洞复现(CVE-2023-29300)

0x01 产品简介 Adobe ColdFusion是美国奥多比&#xff08;Adobe&#xff09;公司的一套快速应用程序开发平台。该平台包括集成开发环境和脚本语言。 0x02 漏洞概述 Adobe ColdFusion存在代码问题漏洞&#xff0c;该漏洞源于受到不受信任数据反序列化漏洞的影响&#xff0c;攻击…

赶快卸载 Navicat和DataGrip吧,阿里又开源了一款数据库神器,太炸了

Chat2DB 是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语言转换为SQL&#xff0c;也可以…

eclipse was unable to locate its companion shared library

当转移或者Copy工程时&#xff0c; eclipse was unable to locate its companion shared library eclipse.ini 里面的路径配置错误导致 --launcher.library C:/Users/**/.p2/pool/plugins/org.eclipse.equinox. launcher.win32.win32.x86_64_1.2.700.v20221108-1024 -product …

什么是数字化?数字化转型概念是怎么兴起的?

什么是数字化&#xff1f;数字化转型的概念是怎么兴起的&#xff1f;下面我将分为2部分给大家做详细讲解。 一、什么是数字化&#xff1f; 不同国家和不同行业&#xff0c;似乎对数字化转型有不同的定义。比如&#xff1a; 美国早在2003年就提出了“数字化双胞胎”的概念&…

FuncGPT来了!专注AI生成JAVA函数,五大能力ChatGPT都说好

大语言模型风靡全球&#xff0c;正加速重构各行各业。继 GPT-4 、文心一言等生成式 AI产品之后&#xff0c;代码生成工具的队伍再添新员。近日FuncGPT&#xff08;慧函数&#xff09;功能重磅上线。 作为飞算SoFlu软件机器人的一个重要组成部分&#xff0c;FuncGPT&#xff08;…

Python 程序设计入门(001)—— 安装 Python(Windows 操作系统)

Python 程序设计入门&#xff08;001&#xff09;—— 安装 Python&#xff08;Windows 操作系统&#xff09; 目录 Python 程序设计入门&#xff08;001&#xff09;—— 安装 Python&#xff08;Windows 操作系统&#xff09;一、下载 Python 安装包二、安装 Python三、测试&…

如何在Visual Studio Code中用Mocha对TypeScript进行测试

目录 使用TypeScript编写测试用例 在Visual Studio Code中使用调试器在线调试代码 首先&#xff0c;本文不是一篇介绍有关TypeScript、JavaScript或其它编程语言数据结构和算法的文章。如果你正在准备一场面试&#xff0c;或者学习某一个课程&#xff0c;互联网上可以找到许多…

Java版本工程行业管理系统源码-专业的工程管理软件-提供一站式服务 em

&#xfeff; 工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据…

如何开发专属花店小程序

在当今移动互联网时代&#xff0c;小程序已经成为各类企业的必备营销工具之一。对于花店来说&#xff0c;打造一个花店预约小程序&#xff0c;可以帮助提升用户体验&#xff0c;提高销售额。那么&#xff0c;如何从零开始&#xff0c;快速打造一个花店预约小程序呢&#xff1f;…

Vue3 实用的开发技巧

一、前言 Vue3已经发布很长时候了&#xff0c;官方也将默认版本切换到了vue3&#xff0c;Vue官网也发布了完善的中文文档&#xff0c;不知同志们是否已经开始使用了了呢&#xff1f;下面给大家介绍一些在开发中Vue3实用的开发技巧&#xff0c;让大家开发更加流畅。 二、开发技…

Vue实现leafletMap自定义绘制线段 并且删除指定的已绘制的点位

效果&#xff1a;点击表格可实现选中地图点位&#xff0c;删除按钮点击可删除对应点位并且重新绘制线段&#xff0c;点击确定按钮 保存已经绘制的点位信息传给父组件 并且该组件已实现回显 完整的组件代码如下 文件名称为&#xff1a; leafletMakePointYt <!--* Descripti…

小程序学习(六):全局配置

1.全局配置文件及常用的配置项 全局配置-window 2.小程序窗口的组成部分 3.了解window节点常用的配置项 4.设置导航栏的标题 设置步骤:app.json->window->navigationBarTitleText 5.设置导航栏的背景色 背景颜色不支持red这种文字 6.设置导航栏的标题颜色 注意:navigat…

山西电力市场日前价格预测【2023-08-03】

日前价格预测 预测明日&#xff08;2023-08-03&#xff09;山西电力市场全天平均日前电价为344.46元/MWh。其中&#xff0c;最高日前电价为395.01元/MWh&#xff0c;预计出现在19: 45。最低日前电价为314.42元/MWh&#xff0c;预计出现在03: 15。 价差方向预测 1&#xff1a;实…

CefInitialize初始化

结合代码以及查看exe生成目录的debug.log [0802/160846.105:ERROR:icu_util.cc(133)] Invalid file descriptor to ICU data received. setlocal mt.exe -nologo -manifest "D:/D-Pro/Test/t_Explore/t_Explore/lib/Resources/cefsimple.exe.manifest" "D:/D-P…

第一章 基本的图像操作和处理

文章目录 第一章 基本的图像操作和处理1.1PIL&#xff1a;Python图像处理类库1.1.1转图像格式1.1.2创建缩略图1.1.3复制和粘贴图像区域 1.2Matplotlib1.2.1绘制图像、点、线1.2.2图像轮廓和直方图 1.3NumPy1.3.1图像数组表示1.3.2灰度变换1.3.4直方图均衡化 1.4SciPy1.4.1图像模…

基于Yolov2深度学习网络的车辆检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1. 卷积神经网络&#xff08;CNN&#xff09; 4.2. YOLOv2 网络 4.3. 实现过程 4.4. 应用领域 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心…

USB技术浅析

一、USB3.0 USB是史上定义出的最成功的PC外围互连技术&#xff0c;并且已经迅猛地被引入到CE和Mobile领域。仅仅在2006年&#xff0c;就有超过20亿USB设备出产&#xff0c;而现在已经有超过60亿的USB产品被安装。 而随着技术创新的不断前进&#xff0c;新式设备&#xff0c;媒…