【Three.js入门】纹理加载进度、环境贴图、经纬线映射贴图与高动态范围成像HDR

news2024/12/29 10:24:33

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端
📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招)
🚀未来打算: 为中国的工业软件事业效力n年
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2&Vue3项目实战 🥝Node.js 🍒Three.js
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享&商务合作,快加入进来吧

Three.js 系列文章目录

Three.js 专栏参考链接
Three.js 入门案例程序人生——与足球共舞的火柴人
Three.js 入门(一)创建第一个场景和物体(轨道控制器、坐标轴辅助器…)
Three.js 入门(二)处理动画、尺寸自适应、双击进入/退出全屏
Three.js 入门(三)图形用户界面GUI、BufferGeometry创建矩形、随机生成三角形
Three.js 入门(四)纹理及其常用属性、透明纹理、环境遮挡贴图与强度
Three.js 入门(五)标准网格材质、置换贴图、粗糙度贴图、金属贴图、法线贴图

文章目录

  • Three.js 系列文章目录
    • 一、设置纹理加载进度
      • 1、加载单张纹理
      • 2、加载多张纹理
    • 二、环境贴图
    • 三、经纬线映射贴图与HDR


【使用 Three.js 实现的效果】

一、设置纹理加载进度

1、加载单张纹理

设置 onLoad(),onProgress(),onError(),并在纹理加载器中添加进来

......

let event = {}

// 单张纹理图的加载
event.onLoad = function() {
    console.log('图片加载完成')
}
// 加载进度
event.onProgress = function(e) {
    console.log('图片加载进度', e)
}
// 加载错误
event.onError = function(e) {
    console.log('图片加载出错', e)
}

......

// 纹理加载器 添加纹理图片
const doorColorTexture = textureLoader.load('./textures/color.jpg', event.onLoad, event.onProgress, event.onError)

在这里插入图片描述


2、加载多张纹理

LoadingManager():处理并跟踪已加载和待处理的数据。如果未手动设置加强管理器,则会为加载器创建和使用默认全局实例加载器管理器。

设置纹理加载器,把纹理加载器作为 new THREE.TextureLoader() 的参数

// 设置 div 用来显示进度
let div = document.createElement("div")
div.style.width = "200px"
div.style.height = "200px"
div.style.position = "fixed"
div.style.right = "0"
div.style.top = "0"
div.style.color = "#fff"
document.body.appendChild(div)

// 纹理图的加载
event.onLoad = function(e) {
    console.log('图片加载完成')
}
// 加载进度
event.onProgress = function(url, num, total) {
    console.log('图片加载完成', url)
    console.log('图片加载进度', (num / total * 100).toFixed(2) + '%')
    console.log('图片总数', total)
    let value = (num / total * 100).toFixed(2) + '%'
    div.innerHTML = value
}
// 加载错误
event.onError = function(e) {
    console.log('图片加载出错', e)
}

// 设置加载管理器
const loadingManager = new THREE.LoadingManager(
   event.onLoad,
   event.onProgress,
   event.onError 
)

// 导入纹理(参数为加载管理器,可以为所有的纹理加载)
const textureLoader = new THREE.TextureLoader(loadingManager)

在这里插入图片描述


二、环境贴图

环境贴图 (Environment Mapping) 又叫反射贴图 (Reflection Mapping)

在曲面上对反射效果进行很好的的近似。

在这里插入图片描述

下面我们来进行环境贴图,把图片贴到球体上,注意:px:x轴正向,nx:x轴负向,以此类推…

// 设置 cube 纹理加载器
const cubeTextureLoader = new THREE.CubeTextureLoader()
// 导入环境图(px:x轴正向,nx:x轴负向...)
const envMapTexture = cubeTextureLoader.load([
    'textures/environmentMaps/1/px.jpg',
    'textures/environmentMaps/1/nx.jpg',
    'textures/environmentMaps/1/py.jpg',
    'textures/environmentMaps/1/ny.jpg',
    'textures/environmentMaps/1/pz.jpg',
    'textures/environmentMaps/1/nz.jpg',
])

// 创建一个球
const sphereGeometry = new THREE.SphereBufferGeometry(1, 20, 20)
// 设置材质
const material = new THREE.MeshStandardMaterial({
    // 金属度
    metalness: 0.9,
    // 粗糙度
    roughness: 0.1,
    // 设置环境贴图
    envMap: envMapTexture
})

// 结合实体和材质
const sphere = new THREE.Mesh(sphereGeometry, material)

// 添加到场景中
scene.add(sphere)

// 环境光:均匀的照亮场景中的所有物体
const light = new THREE.AmbientLight(0xffffff, 0.9)
scene.add(light)

// 平行光:方向从一个平行光位置 position 到 target 位置
const directionLight = new THREE.DirectionalLight(0xffffff, 0.95)
// 设置光的位置
directionLight.position.set(10, 10, 10)
scene.add(directionLight)

不同角度的效果不一样,详细如下所示:

在这里插入图片描述

在这里插入图片描述


渲染周围的环境,把 xyz 正负轴的图片显示出来

// 给场景添加背景
scene.background = envMapTexture
// 给场景所有的物体添加默认的环境贴图
scene.environment = envMapTexture

不同角度的成像效果如下:

在这里插入图片描述在这里插入图片描述


三、经纬线映射贴图与HDR

高动态范围成像(英语:High Dynamic Range Imaging,简称HDRI或HDR),在计算机图形学与电影摄影术中,是用来实现比普通数位图像技术更大曝光动态范围(即更大的明暗差别)的一组技术。高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度。

DataTextureLoader 用于加载二进制文件格式的(rgbe,hdr,…)抽象类。内部使用 FileLoader 来加载文件,和创建一个新的 DataTexture

mapping 图像将如何应用到物体(对象)上。

下面我们来加载 HDR 环境图(类似于一张全景图,但并不一定是全景图)

在这里插入图片描述

// 导入 RGBE 加载器
import {RGBELoader} from 'three/examples/jsm/loaders/RGBELoader'
// 创建加载器实例
const rgbeLoader = new RGBELoader()
// 异步加载
rgbeLoader.loadAsync("textures/hdr/002.hdr").then((texture) => {
    // 等距圆柱投影的环境贴图,也被叫做经纬线映射贴图
    texture.mapping = THREE.EquirectangularReflectionMapping
    // 设置背景图
    scene.background = texture
    // 设置默认环境
    scene.environment = texture
})

......

不同角度的成像效果如下:

在这里插入图片描述在这里插入图片描述


在这里插入图片描述


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

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

相关文章

VMwareLinux详细安装步骤

一、VmWare虚拟机的安装 目录 一、VmWare虚拟机的安装 1、安装虚拟机 二、在虚拟机上安装CentOS 1、创建新虚拟机 2、选择典型→ 下一步 3、选择稍后安装操作系统 4、选择操作系统和版本 5、输入虚拟机名称和安装路径 6、设置磁盘大小 7、选择CentOS安装镜像文件 8、…

射线检测中的像质计

像质计,透度计 Image Quality Indicators,Penetrameters 分类:线型像质计、阶梯孔型像质计、平板孔型像质计、双丝型像质计。 前三种像质计的作用:测定检测图像的厚度(密度)对比度; 后一种像质…

数论专题(1)数论函数,整数分块

从今天起,我们将要开始数论的学习,是不是感觉很难?难的话就听我讲吧,讲了后就不难了(bushi) 数论函数定义 (数论函数) 数论函数的定义:在全体正整数(或者整数)上定义的函数称作数论函数。 积性的定义:若 gcd(a,b)1,则f(ab)f(a)f(b)。举个栗…

适合制造业的ERP系统有哪些? 制造业的ERP对企业有什么作用?

在当前的激烈的市场竞争下,制造企业如果想要长期稳定地发展,除了需要把外部因素做好把控,还需要提升企业自身的管理水平,来提高自己的竞争力,而信息化是企业发展的必经之路。 适合制造业的ERP系统在企业管理中起到了至…

《Science》教你如何写好一篇博士毕业论文!

博士生涯的完美结束少不了一篇优秀的毕业论文。但是说起来容易,写起来有时让人痛不欲生。不仅内容多,还需要用严谨的逻辑把章节联系起来,常常耗时耗力。而且博士论文要的不仅仅是学术工作的质量,如何将这些工作合理、完整地呈现也…

基于Java实现(PC)大学班级事务管理系统【100010059】

大学班级事务管理系统 要求 本次设计要求利用 Java 实现 C/S 模式的大学班级内日常事务管理系统(PC 版,应用于校内网有线网络访问,暂不开发移动端),不得依赖现有的建模框架,使用 swings 技术完成如下基本…

IP地址分类及范围详解

IP地址分为公网IP地址(合法IP地址)和私有IP地址 公网IP地址主要应用于Internet上的主机访问,而私有IP地址应用于局域网中计算机的相互通信。 IP地址的表示形式:分为二进制表示和点分十进制表示。现在使用的IP地址长度均为32位/4个…

阿里云oss访问图片出现跨域问题

需要服务器端支持,开一下cdn Access-Control-Allow-Origin字段是服务端添加了才有的,前端加了crossOrigin"anonymous"是想跨域获取这张图片,好用在canvas.toDataURL()上,但是服务端不一定同意,服务端添加了…

开始摸索学习go,具体内容和过程就慢慢补充吧。

计划学习路线 文章目录计划学习路线书籍开源项目资料网站课程书籍 《go语言核心编程》 -腾讯作者 《go语言编程之旅》 -5个项目 --对go语言能做的内容做了整体介绍吧,对细节还不够细化,对独立编写代码帮助有限 第二章 swaage 有版本冲突,等…

37.卷积神经网络(LeNet)的代码实现(在colab上)

ps:在教材上直接打开colab,运行原来的代码!pip install githttps://github.com/d2l-ai/d2l-zhrelease # installing d2l是会报错的,改成这句代码,可以正确运行:!pip install d2l0.14.,直接制定了d2l的版本 …

利用Bat打开exe程序并传入值

目录 一、分清楚exe接收值的方式 1、打开exe时提示输入1、2、3... 2、知道exe形参(程序主函数中定义的argv[]) 二、call和start的区别 一、分清楚exe接收值的方式 1、打开exe时提示输入1、2、3... 如图: 这种是程序运行时接收用户输入…

SuperMap GIS 三维硬件设置优化

目录一、简介二、查看硬件显卡三、显卡设置1、NVIDA显卡设置2、AMD显卡设置一、简介 我们都知道为了体验更好的大型3D游戏,那么好的显卡是必不可少的。但是有了好的显卡当配置不对时,此时体验感也会大打折扣。同样的道理,在SuperMap中也需要…

Redis原理篇—通信协议

Redis原理篇—通信协议 笔记整理自 b站_黑马程序员Redis入门到实战教程 RESP协议 Redis 是一个 CS 架构的软件,通信一般分两步(不包括 pipeline 和 PubSub): 客户端(client)向服务端(server&a…

VMC证书是什么?获取认证标志证书步骤是怎样的?

VMC证书是什么? VMC证书(全称:Verified Mark Certificate),也称认证标志证书,是由权威CA机构颁发,用于验证商标所有权的数字证书。 VMC 通过提供验证机制与 BIMI 协同工作,BIMI标准可以在电子邮件中的“发…

OSCS开源安全周报第23期:Foxit PDF Reader/Editor 任意代码执行漏洞

本周安全态势综述 OSCS 社区共收录安全漏洞10个&#xff0c;其中公开漏洞值得关注的是 Apache Airflow Hive Provider <5.0.0 存在操作系统命令注入漏洞&#xff08;CVE-2022-46421&#xff09;vm2 < 3.9.10 存在任意代码执行漏洞&#xff08;CVE-2022-25893&#xff0…

湖南软件工程自考本科总结

本人情况 在湖南长沙考试&#xff0c;从2021年初开始备考&#xff0c;社会考生&#xff0c;自己复习&#xff0c;从2021-4月到2022-10月&#xff0c;理论每次都考了4门课程&#xff0c;前3次每次挂了1门课程&#xff0c;刚刚好在4次考试完成了所有的理论考试。 经验分享 复习重…

2022 re:Invent 凌云驭势 重塑未来

2022年11月29日&#xff0c;一年一度的亚马逊 re:Invent全球大会在拉斯维加斯再度上演&#xff0c;这是亚马逊云科技第11年举办re:Invent&#xff0c;来自全球的5万多客户和合作伙伴参加了此次线下盛会&#xff0c;还有超过30万人线上参会。在此次大会上&#xff0c;亚马逊云科…

喜报 | 云畅科技再次入榜湖南省互联网企业50强

12月21日&#xff0c;湖南省互联网协会在国家网络安全产业园区&#xff08;长沙&#xff09;发布了2022年湖南省互联网企业综合实力30强榜单、互联网成长型企业10强榜单、互联网创新型企业10强榜单和《2022年湖南省互联网企业50强发展报告》。 湖南云畅网络科技有限公司&#x…

burpsuite靶场——CSRF

文章目录什么是CSRF&#xff1f;CSRF 攻击的影响是什么&#xff1f;CSRF 是如何工作的&#xff1f;没有防御的 CSRF 漏洞常见的 CSRF 漏洞Token验证取决于请求方法Token的验证取决于Token是否存在CSRF Token未绑定到用户会话Token未与会话 cookie绑定什么是CSRF&#xff1f; 跨…

【HTML】动画合集--跟着pink老师学习

1.奔跑小熊 奔跑小熊<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…