Three.js Journey — Learn WebGL with Three.jsThe ultimate Three.js course whether you are a beginner or a more advanced developerhttps://threejs-journey.com/?c=p3

使用原生 JavaScript

首先是静态页面的放置位置,如果使用Vite模版配置,可以直接放在 /static/ 文件夹中,引用参考:

const imageSource = '/files/image.png'console.log(imageSource)

简单带过一下使用原生JavaScript的步骤:

  1. 创建 Image 实例
  2. 监听 image 的 load 事件
  3. 将texture变量提升为全局变量,并使用 Texture 类创建纹理
  4. 设置 image.src 属性加载图片,再将texture变量提升为全局变量
  5. 将texture应用到material中
const image = new Image()
const texture = new THREE.Texture(image)
texture.colorSpace = THREE.SRGBColorSpace  // 修正 `sRGB` 颜色空间造成的纹理色值偏差
image.addEventListener('load', () =>
{texture.needsUpdate = true  // 更新在函数外部创建的纹理
})
image.src = '/textures/door/color.jpg'// ...const material = new THREE.MeshBasicMaterial({ map: texture })

用于材质的 map 或 matcap 属性的纹理应该以 sRGB 编码,需要将 colorSpace 设置为 THREE.sRGBColorSpace,但仅限于这些纹理。

总结关键点:

1.  texture.colorSpace = THREE.SRGBColorSpace

2. texture.needsUpdate = true

【效果图】

使用 TextureLoader

将上面原生JavaScript的引入改为 THREE.TextureLoader() 引入:

const textureLoader = new THREE.TextureLoader()
const texture = textureLoader.load('/textures/door/color.jpg')
texture.colorSpace = THREE.SRGBColorSpace

可以使用一个 TextureLoader 实例加载任意多的纹理(一对多)。如果现在有多个图片需要加载,并且希望共享事件(比如在所有图片加载完成后接收通知),可以使用THREE.LoadingManager() 与THREE.TextureLoader() 配合:

const loadingManager = new THREE.LoadingManager()
const textureLoader = new THREE.TextureLoader(loadingManager)

如果想要显示加载器并在所有资源加载完成后隐藏它,LoadingManager 对这点非常有用,可以通过将以下属性替换为自己的函数来监听各种事件。

// LoadingManager的使用
const loadingManager = new THREE.loadingManager()
// 可以通过将以下属性替换为自己的函数来监听各种事件
loadingManager.onStart = ()=> {console.log('loading started!');    
}
loadingManager.onLoad = ()=> {console.log('loading finished!');    
}
loadingManager.onProgress = ()=> {console.log('loading progressing!');    
}
loadingManager.onError = ()=> {console.log('loading error!');    
}
const TextureLoader = new THREE.TextureLoader(loadingManager)

【扩展】ExrLoader

这次下载的素材中有以 .exr 后缀结尾的文件,经查需要通过 ExrLoader 进行导入,直接用

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git 仓库取消合并的分支

要取消 Git 仓库中某次特定的分支合并(例如第一次合并),同时保留其他分支的合并,需要通过 Git 的版本控制功能来操作。以下是具体的步骤和方法,假设你想撤销某次合并(例如某个提交),并确保其他合并不受影响: 背景假设 你有一个 Git 仓库,主分支(例如 main)上已经合…

【从历史数据分析英特尔该如何摆脱困境】

与大多数其他分析师不同,自2013年以来,笔者就一直在积极强调英特尔未来将遭遇冰山,最终我们预测英特尔将在试图执行其之前的战略时破产。尽管我们更愿意采用与英特尔不同的代工厂方法(即与台积电成立合资企业)&#xf…

【PyTorch】PyTorch中张量(Tensor)微分操作

PyTorch深度学习总结 第六章 PyTorch中张量(Tensor)微分操作 文章目录 PyTorch深度学习总结前言一、torch.autograd模块二、主要功能和使用方法1. 张量的 requires_grad 属性2. backward() 方法3. torch.no_grad() 上下文管理器三、函数总结前言 上文介绍了PyTorch中张量(Ten…

Rust 项目实战:Flappy Bird 游戏

Rust 项目实战:Flappy Bird 游戏 Rust 项目实战:Flappy Bird 游戏理解 Game loop开发库:bracket-libbracket-terminalCodepage 437导入 bracket-lib 创建游戏游戏的模式添加玩家添加障碍最终效果项目源码 Rust 项目实战:Flappy Bi…

Gin 中间件详解与实践

一、中间件的核心概念 定义 中间件是Web开发中非常重要的概念,它可以在请求到达最终处理函数之前或响应返回客户端之前执行一系列操作。Gin 框架支持自定义和使用内置的中间件,让你在请求到达路由处理函数前进行一系列预处理操作。 它是介于请求与响应处…

非接触式DIC测量系统:助力汽车研发与测试的创新技术应用

近年来,随着新能源汽车品牌的快速崛起,新车发布的节奏加快,层出不穷的新产品,给消费者带来了全新的使用体验。与此同时,变革的产品体验也让一些过往的汽车测试和评价标准变得不再适用,尤其是与过往燃油车型…

FOC学习笔记(7)锁相环(PLL)原理及其在电机控制中的应用

1. 锁相环(PLL)概述 锁相环(Phase-Locked Loop, PLL)是一种闭环控制系统,用于使输出信号的相位与输入参考信号的相位同步。PLL广泛应用于通信、电机控制、频率合成、时钟恢复等领域。在电机无传感器控制(Sensorless Control&…

鸿蒙自定义相机的拍照页面

1、权限申请 "requestPermissions": [{"name": "ohos.permission.CAMERA","reason": "$string:reason_camera","usedScene": {"abilities": ["EntryAbility"]}},{"name": "oh…

greenplum7.2并行备份及恢复

1.并行备份 pg_dump -Fd --gp-syntax -U gpadmin -p 5432 -h 172.19.0.2 -d postgres -j 4 -f /opt/greenplum/data/postgres_backup_$(date %Y-%m-%d) 参数 含义 -Fd 使用 directory 格式(支持并行) --gp-syntax 使用 Greenplum 特定语法(…

备赛2025年初中古诗文大会:练习历年真题,吃透知识点(0703)

初中古诗文大会的比赛内容古诗词、文言文各占比50%左右,从历年的比赛来看,中考语文的古诗文部分(35分)涉及到的古诗词、文言文知识点都在初中古诗文大会中考过。这些知识点掌握了,对于将来高中、高考也有直接的帮助。 …

BRAKER:真核微生物cds和蛋白注释

https://github.com/Gaius-Augustus/BRAKER 安装 # 第一次打开会pull这个docker docker run --user 1000:100 --rm -it teambraker/braker3:latest bash bash /opt/BRAKER/example/docker-tests/test3.sh braker.gtf:BRAKER 的最终基因集。 braker.codingseq&am…

基于 Three.js 与 WebGL 的商场全景 VR 导航系统源码级解析

本文面向Web前端开发者、WebGL/Three.js 爱好者、对VR/AR应用开发感兴趣的技术人员、智慧商场解决方案开发者。详细介绍如何利用 WebGL (Three.js框架) 构建高性能的商场全景VR环境,并实现精准的室内定位与3D路径规划导航功能。 如需获取商场全景VR导航系统解决方案…

AWS CloudFormation部署双可用区VPC网络架构 - 完整指南

一、模板概述 本CloudFormation模板用于在AWS上快速部署一个高可用的双可用区VPC网络架构,包含公有子网和私有子网。该架构是构建云原生应用的基础,特别适合生产环境使用。 二、完整模板代码 AWSTemplateFormatVersion: 2010-09-09 Description: Customizable dual-AZ VPC…

2025汽车声学升级:高透音汽车喇叭网成高端车型新标配

随着消费者对车载音质和静谧性要求的提升,高透音汽车喇叭网正成为高端车型的差异化配置。传统冲压金属网因声学损耗大、设计单一逐渐被淘汰,而新一代蚀刻工艺通过微孔结构优化,实现了声学性能与美学设计的双重突破。以下是技术趋势与市场前景…

决策树(Decision tree)算法详解(ID3、C4.5、CART)

文章目录 一、决策树介绍1.1 决策树的结构特征1.2 决策树的构建三步骤1.3 决策树构建例子 二、ID3决策树:基于信息增益的决策模型2.1 信息增益的公式与符号解析2.2 信息增益的意义2.3 ID3决策树案例演示:贷款申请分类2.4 ID3决策树缺陷 三、C4.5决策树&a…

python基础-网络的TCP、UDP协议操作

1.tcp基本语法 # ### TCP协议 客户端 import socket # 1.创建一个socket对象 sk socket.socket() # 2.与服务端建立连接 sk.connect( ("127.0.0.1" , 9000) ) # 3.收发数据的逻辑 """发送的数据类型是二进制字节流""" ""&q…

基于spark的航班价格分析预测及可视化

基于spark的航班价格分析预测及可视化 项目概况 [👇👇👇👇👇👇👇👇] 点这里,查看所有项目 [👆👆👆👆👆👆&…

每日算法刷题Day41 6.28:leetcode前缀和2道题,用时1h20min(要加快)

5. 523.连续的子数组和(中等,学习) 523. 连续的子数组和 - 力扣(LeetCode) 思想 1.给你一个整数数组 nums 和一个整数 k ,如果 nums 有一个 好的子数组 返回 true ,否则返回 false: 一个 好的子数组 是:…

拉取vue-element-admin

这个错误表明 npm 在尝试通过 SSH 克隆 GitHub 仓库时遇到了权限问题,根本原因是系统无法正确处理中文用户名路径下的 SSH 配置。以下是详细的解决方案: 解决方案 1:使用 HTTPS 代替 SSH(推荐) 修改 Git 全局配置&…

c语言的数组注意事项

在C语言中,int()[5]和int是两种完全不同的指针类型,理解它们的区别对于正确处理数组和多维数组至关重要。下面详细解释: 1:int*(指向整型的指针) 含义:指向单个int类型数据的指针典型用法&…