【threejs教程9】threejs加载360全景图(VR)的两种方法

server/2024/10/9 17:27:55/

目录

前言         

1.Equirectangular映射背景

实现步骤

1.初始化TextureLoader

 2.加载Equirectangular纹理

  3.配置映射类型和颜色空间 

 4.应用背景

完整代码如下

2.立方体贴图背景 

实现步骤

1.创建CubeTextureLoader

2.加载立方体贴图 

3.应用背景 

 完整代码如下

总结


前言         

在3D应用开发中,为场景设置引人入胜的背景是提升视觉效果的关键一环。Three.js,作为一款强大的Web 3D库,提供了多种方式来加载和应用背景。本文将介绍两种实用方法:使用Equirectangular映射的纹理以及立方体贴图(Cube Texture),让你的3D场景更加生动逼真。

1.Equirectangular映射背景

素材图片地址👉点击前往 

Equirectangular映射是一种将球面图像展开成矩形的技术,广泛应用于全景图的展示。在Three.js中,利用这种映射方式加载背景,可以轻松实现360度环境映射,为你的场景营造沉浸式体验。

实现步骤

1.初始化TextureLoader

首先,需要创建一个THREE.TextureLoader实例,这是加载图像资源的工具。

javascript">const textureLoader = new THREE.TextureLoader();
 2.加载Equirectangular纹理

使用load方法加载一张Equirectangular格式的全景图像。

javascript">const textureEquirec = textureLoader.load('./img/bg1.jpg');
  3.配置映射类型和颜色空间 

        为了正确显示,我们需要指定纹理映射方式为THREE.EquirectangularReflectionMapping,并设置正确的颜色空间。

javascript">textureEquirec.mapping = THREE.EquirectangularReflectionMapping;
textureEquirec.colorSpace = THREE.SRGBColorSpace;
 4.应用背景

        最后,将此纹理设置为场景的背景。

javascript">scene.background = textureEquirec;
完整代码如下
javascript"><template></template>
<script setup>
import * as THREE from 'three'
import { onMounted } from 'vue'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
const scene = new THREE.Scene()
// 加载背景
const textureLoader = new THREE.TextureLoader()
const textureEquirec = textureLoader.load('./img/bg1.jpg')
textureEquirec.mapping = THREE.EquirectangularReflectionMapping
textureEquirec.colorSpace = THREE.SRGBColorSpace
scene.background = textureEquirec
const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000
)
const renderer = new THREE.WebGLRenderer({ antialias: true })
const controls = new OrbitControls(camera, renderer.domElement)
onMounted(() => {init()
})
function init() {camera.position.set(0, 0, 5)renderer.setSize(window.innerWidth, window.innerHeight)document.body.appendChild(renderer.domElement)controls.update()function animate() {requestAnimationFrame(animate)controls.update()renderer.render(scene, camera)}animate()
}
</script>

2.立方体贴图背景 

 

           

立方体贴图由六个面组成,分别对应立方体的正X、负X、正Y、负Y、正Z、负Z方向,能够全方位地包裹场景,提供更加细腻真实的环境反射效果。

图像素材为官网示例中获取,也可从我这里网盘下载👉点击下载

实现步骤

1.创建CubeTextureLoader

与单张图像不同,立方体贴图需要专门的加载器THREE.CubeTextureLoader

javascript">const loader = new THREE.CubeTextureLoader();
2.加载立方体贴图 
  1. 由于立方体贴图由六张图像构成,我们首先设置它们的共同基础路径。

    javascript">loader.setPath('./img/');
  2. 接下来,按顺序列出六张图像文件名,这些图像分别代表立方体的六个面。

    javascript">const textureCube = loader.load(['posx.jpg', 'negx.jpg','posy.jpg', 'negy.jpg','posz.jpg', 'negz.jpg'
    ]);
3.应用背景 

 同样地,将立方体贴图设置为场景背景。

javascript">scene.background = textureCube;
 完整代码如下
javascript"><template></template>
<script setup>
import * as THREE from 'three'
import { onMounted } from 'vue'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
const scene = new THREE.Scene()
// 加载背景
// const textureLoader = new THREE.TextureLoader()
// const textureEquirec = textureLoader.load('./img/bg1.jpg')
// textureEquirec.mapping = THREE.EquirectangularReflectionMapping
// textureEquirec.colorSpace = THREE.SRGBColorSpace
// scene.background = textureEquirec
const loader = new THREE.CubeTextureLoader()
loader.setPath('./img/')
const textureCube = loader.load(['posx.jpg','negx.jpg','posy.jpg','negy.jpg','posz.jpg','negz.jpg',
])
scene.background = textureCube
const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000
)
const renderer = new THREE.WebGLRenderer({ antialias: true })
const controls = new OrbitControls(camera, renderer.domElement)
onMounted(() => {init()
})
function init() {camera.position.set(0, 0, 5)renderer.setSize(window.innerWidth, window.innerHeight)document.body.appendChild(renderer.domElement)controls.update()function animate() {requestAnimationFrame(animate)controls.update()renderer.render(scene, camera)}animate()
}
</script>

总结

        通过上述两种方法,我们可以轻松地为Three.js场景添加丰富多彩的背景。Equirectangular映射适合于全景背景,营造无缝的环境体验;立方体贴图则在需要更精细环境反射的场景中大显身手。掌握这两种技术,将使你的3D项目更加出彩,为用户带来更加震撼的视觉享受。在实际开发中,根据项目需求选择最合适的背景加载方式,让创意无限延伸。


http://www.ppmy.cn/server/16972.html

相关文章

NLP(8)--利用RNN实现多分类任务

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 循环神经网络RNN&#xff08;recurrent neural network&#xff09;&#xff1a; 主要思想&#xff1a;将整个序列划分成多个时间步&#xff0c;将每一个时间步的信息依次输入模型&#xff0c;同时将模型输出的结果传给下一个…

分类算法——集成学习方法之随机森林(六)

集成学习方法 集成学习通过建立几个模型组合的来解决单一预测问题。它的工作原理是生成多个分类 器/模型&#xff0c;各自独立地学习和作出预测。这些预测最后结合成组合预测&#xff0c;因此优于任何一 个单分类的做出预测。 随机森林 在机器学习中&#xff0c;随机森林是一…

SpringBoot - java.lang.NoClassDefFoundError: XXX

问题描述 以 json-path 为例&#xff1a;java.lang.NoClassDefFoundError: com/jayway/jsonpath/Configuration 原因分析 编译不报错&#xff0c;但是运行时报错。 遇到这样类似的问题&#xff0c;首先就要想到是不是 Jar 包冲突引起的&#xff0c;或者引入的不是理想的 Jar…

市场投放用户获取方面如何做数据分析

常用数据分析指标 1. 基础指标 下载量: 指通过广告投放带来的下载安装量。 安装率: 指广告点击后下载安装的用户占比。 激活率: 指下载安装后启动应用的用户占比。为了防止假量和刷量&#xff0c;一般会把激活动作定义得更严格更深层一些。比如用户浏览30秒&#xff0c;用户…

全面解读CMS系统:核心技术、架构设计与应用实践

引言 内容管理系统&#xff08;Content Management System, CMS&#xff09;作为一种广泛应用的软件平台&#xff0c;以其强大的内容创建、编辑、发布和管理功能&#xff0c;极大地简化了网站、移动应用以及各类数字媒体的内容运营工作。本文将从核心技术、架构设计以及实际应用…

4月26日 阶段性学习汇报

1.毕业设计与毕业论文 毕业设计已经弄完&#xff0c;加入了KNN算法&#xff0c;实现了基于四种常见病的判断&#xff0c;毕业论文写完&#xff0c;格式还需要调整&#xff0c;下周一发给指导老师初稿。目前在弄答辩ppt&#xff08;25%&#xff09;。25号26号两天都在参加校运会…

森林消防隔膜泵的应用与前景——恒峰智慧科技

随着全球气候变暖&#xff0c;森林火灾频发&#xff0c;给生态环境和人类安全带来严重威胁。为有效应对这一挑战&#xff0c;森林消防领域不断引入新技术、新装备。其中&#xff0c;隔膜泵作为一种高效、可靠的消防设备&#xff0c;正逐渐受到广泛关注。本文将探讨森林消防隔膜…

分享基于鸿蒙OpenHarmony的Unity团结引擎应用开发赛

该赛题旨在鼓励更多开发者基于OpenHarmony4.x版本&#xff0c;使用团结引擎创造出精彩的游戏与应用。本次大赛分为“创新游戏”与“创新3D 化应用”两大赛道&#xff0c;每赛道又分“大众组”与“高校组”&#xff0c;让不同背景的开发者同台竞技。无论你是游戏开发者&#xff…