Three.js 监听纹理加载

本文简介

本文介绍 Three.js 的基础方法:监听材质加载。

在 《Three.js 基础纹理贴图》 里介绍了如何给图形贴图,贴图前需要先把纹理加载好。我们基于这篇文章继续讲解如何监听材质加载成功或者失败。

监听单个材质

我们使用 TextureLoaderload() 方法加载纹理时,第一个参数传入纹理的路径,之后还可以多接受3个函数类型的参数。

根据 Three.js 的 TextureLoader.load 文档介绍,这几个参数是:

  • 【参数1】url: 文件的URL或者路径。
  • 【参数2】onLoad: 材质加载完时调用
  • 【参数3】onProgress: 材质加载过程中调用,实例包含 totalloaded但文档说了在 Three.js r84 时启用了 TextureLoader 进度事件
  • 【参数4】onError: 在加载错误时被调用。

先上一个官方的例子

```js // 初始化一个加载器 const loader = new THREE.TextureLoader();

// 加载一个资源 loader.load( // 【参数1】资源URL 'textures/landoceanicecloud2048.jpg',

// 【参数2】onLoad回调
function ( texture ) {// 【才材质加载成功后执行】const material = new THREE.MeshBasicMaterial( {map: texture} );
},// 【参数3】目前暂不支持onProgress的回调
undefined,// 【参数4】onError回调,
function ( err ) {console.error( '材质加载失败' );
}

) ```

从官网给出的例子中可以看到,【参数3】原本用来监听材质加载进度的 onProgress() 方法用了 undefined 来代替占着位。

监听多个材质

如果要加载多个材质,我们可以使用 LoadingManager 来监听,这个方法可以配合 TextureLoader 一起用的。

LoadingManager 可以监听材质加载结果(成功或失败),也可以监听材质加载进度。

LoadingManager(onLoad, onProgress, onError) 接受3个回调函数,作用分别是:

  • onLoad: (可选) 所有加载器加载完成后,将调用此函数。
  • onProgress: (可选) 当每个项目完成后,将调用此函数。
  • onError: (可选) 当一个加载器遇到错误时,将调用此函数。

我们需要在 new THREE.TextureLoader(loadingManager) 时将 loadingManager 传入。9

举个例子:

```js // 省略部分代码

// 设置加载管理器 const loadingManager = new THREE.LoadingManager( function() { console.log('图片加载完成') }, function(url, loaded, total) { console.log(图片加载中,本次加载的材质${url},第 ${loaded}/${total} 个材质) }, function(err) { console.log('图片加载失败', err) } )

// Three提供的纹理加载器 const textureLoader = new THREE.TextureLoader(loadingManager)

// 导入纹理贴图基础贴图 const imgTexture1 = textureLoader.load('../assets/images/140.jpg') const imgTexture2 = textureLoader.load('../assets/images/141.jpg') ```

此时控制台会依次输出

``` 图片加载中,本次加载的材质../assets/images/140.jpg,第 1/2 个材质

图片加载中,本次加载的材质../assets/images/141.jpg,第 2/2 个材质

图片加载完成 ```

这是在 140.jpg141.jpg 都存在的情况下会这样输出。

假设要加载2个材质,其中一个材质是存在的,另一个材质不存在,就会分别输出每个材质的结果。

```js // 省略部分代码

// 导入纹理贴图基础贴图 const imgTexture1 = textureLoader.load('../assets/images/140.jpg') // 该材质是存在的 const imgTexture2 = textureLoader.load('../assets/images/100.jpg') // 该材质不存在 ```

这种情况会这样输出:

``` 图片加载失败 ../assets/images/13.jpg

图片加载中,本次加载的材质../assets/images/13.jpg,第 1/2 个材质

图片加载中,本次加载的材质../assets/images/140.jpg,第 2/2 个材质

图片加载完成 ```

可以在 onError 里监听到当前哪个材质加载失败,参数会将加载失败的材质路径返回给开发者。

日常开发推荐使用 LoadingManager ,尤其是要监听加载多个材质时,用 LoadingManager 可以帮我们实现加载进度条。

推荐阅读

👍《Three.js 起飞!》

👍《Three.js 场景 Scene》

👍《Three.js 辅助坐标轴》

👍《Three.js 性能监视器 Stats》

👍《Three.js 这样写就有阴影效果啦》

👍《Three.js 基础纹理贴图》

点赞 + 关注 + 收藏 = 学会了

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

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

相关文章

TC3XX - MCAL知识点(二十六):GETH MCAL配置及代码实战(以太网)

目录 1、概述 2、MCAL配置 2.1、配置目标 2.2、ETH配置 2.2.1、EthGeneral 2.2.2、EthCtrlOffloading 2.2.3、EthConfigSet 2.3、Port配置 2.4、IRQ配置 2.5、MC

ChatGPT收录

VSCode插件-ChatGPT 多磨助手 多磨助手 (domore.run) Steamship Steamship 免费合集 免费chatGPT - Ant Design Pro 免费AI聊天室 (xyys.one)

解决flutter showDialog下拉框,复选框等无法及时响应的问题

使用StatefulBuilder _showDialogr() {showDialog(context: context,builder: (BuildContext ctx) {return StatefulBuilder(builder: (BuildContext context, StateSetter setState) {return Scaffold(body: Column(children: <Widget>[Container(height: 400,padding: …

使用nio代替传统流实现文件上传和下载功能

1.文件下载 /**NIO文件下载工具类* author olalu*/ public class NioDownloadUtils {/*** description:* param file: 要下在文件* return: void*/public static void downloadDoc(File file,HttpServletResponse response) throws IOException {OutputStream outputStream r…

武汉地铁19号线完成5G专网全覆盖,现场测试下行速率超千兆!

近日&#xff0c;极目新闻记者从中国移动湖北公司获悉&#xff0c;随着武汉地铁19号线全线隧道正式贯通&#xff0c;湖北移动目前已完成新月溪公园至鼓架山站5G网络覆盖&#xff0c;轨行区5G专网全覆盖&#xff0c;并成功进行试车验证&#xff0c;19号线成为国内首条全线实现5G…

实习笔记(一)

自定义注解&#xff1a; 自定义注解中有三个元注解Target,Retention,Document /*** 系统日志注解** author Mark sunlightcsgmail.com*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface SysLog {String value() default "…

2023全国大学生数学建模竞赛C题思路模型代码

目录 1.C题思路模型&#xff1a;比赛开始后&#xff0c;第一时间更新&#xff0c;获取见文末名片 2.比赛时间&#xff1a;2023年9月7日18点到2023年9月10日20点 3 全国大学生数学建模竞赛常见数模问题 3.1 分类问题 3.2 优化问题 详细思路见此名片&#xff0c;开赛第一时间…

面试题解析 | 为什么Redis使用单线程性能会优于多线程?

大家好&#xff0c;我是小米&#xff01;今天我要和大家聊一个有关Redis的热门面试题&#xff1a;为什么Redis使用单线程性能会优于多线程&#xff1f;相信这个问题在很多同学心中都曾经纠结过&#xff0c;那么接下来&#xff0c;就让我们一起来揭开这个技术之谜吧&#xff01;…

LeetCode 37题:解数独

题目 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 数独…

IDEA简单拷贝一份新项目记录

IDEA简单拷贝项目记录 拷贝后改项目名&#xff0c;然后iml 配置文件改项目名&#xff0c;然后 .idea 中的compiler.xml 里面的name标签改项目名。 就可以了

【软件工程】软件测试

软件测试的对象 软件程序文档 测试对象&#xff1a;各个阶段产生的源程序和文档。 软件测试的目的 基于不同的立场&#xff0c;对软件测试的目的存在着两种完全对立的观点。 &#xff08;1&#xff09;一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度)&#xf…

ssh-keygen 做好免密登录后不生效

免密说明 通常情况下&#xff0c;我们ssh到其他服务器需要知道服务器的用户名和密码。对于需要经常登录的服务器每次都输入密码比较麻烦&#xff0c;因此我们可以在两台服务器上做免密登录&#xff0c;即在A服务器可以免密登录B服务器。 在A服务器上登录B服务器时&#xff0c;…

Tik Tok娱乐+电商MCN怎么做?

在美国外的热门市场中&#xff0c;TikTok 主要做的区域市场包括中东、拉美、欧洲和东亚&#xff0c;而这里面适合做电商的其实并不多。 欧洲、东亚都属于成熟市场&#xff0c;且 TikTok 本身在欧洲面临 DSA 法案更严格的审查&#xff0c;与在英国相同&#xff0c;欧洲各市场消…

第G1周:生成对抗网络(GAN)入门

&#x1f368; 本文为[&#x1f517;365天深度学习训练营]内部限免文章&#xff08;版权归 *K同学啊* 所有&#xff09; &#x1f356; 作者&#xff1a;[K同学啊] 一、理论基础 生成对抗网络&#xff08;Generative Adversarial Networks, GAN&#xff09;是近年来深度学习领域…

Windows安装Go开发环境

Windows安装Go开发环境 一、Go语言下载地址 https://golang.google.cn/dl/ 二、设置工作空间GOPATH目录(Go语言开发的项目路径) 首先进入我的C盘&#xff08;你放到其他盘也行&#xff09;&#xff0c;新建一个文件夹&#xff0c;名字叫做mygo&#xff08;这个就是你的工作目…

ArcGIS Maps SDK for JavaScript系列之一:在Vue3中加载ArcGIS地图

目录 ArcGIS Maps SDK for JavaScript简介ArcGIS Maps SDK for JavaScript 4.x 的主要特点和功能AMD modules 和 ES modules两种方式比较Vue3中使用ArcGIS Maps SDK for JavaScript的步骤创建 Vue 3 项目安装 ArcGIS Maps SDK for JavaScript创建地图组件 ArcGIS Maps SDK for …

“深入理解JVM:探索Java虚拟机的内部工作原理“

标题&#xff1a;深入理解JVM&#xff1a;探索Java虚拟机的内部工作原理 摘要&#xff1a;本文将深入探索Java虚拟机&#xff08;JVM&#xff09;的内部工作原理&#xff0c;包括JVM的架构、类加载、内存管理、垃圾回收机制等方面。通过理解JVM的内部工作原理&#xff0c;我们…

华为开源自研AI框架昇思MindSpore应用案例:基于MindSpore框架的UNet-2D案例实现

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、环境准备与数据读取三、模型解析Transformer基本原理Attention模块 Transformer EncoderViT模型的输入整体构建ViT 四、模型训练与推理模型训练模型验证模型推理 近些年&#xff0c;随着基于自注意&…

改造旧项目-长安分局人事费用管理系统

一、系统环境搭建 1、搭建前台环境 vue3vite构建项目复制“银税系统”页面结构&#xff0c;包括&#xff1a;路由、vuex存储、菜单、登录&#xff08;复制一个干净的空架子&#xff09; 2、搭建后台环境 新三大框架 SSMP聚合工程&#xff1a;common、admin&#xff0c;新的…

JAVA冒泡排序

package com.hzh.javase.day03;public class maopao {public static void main(String[] args) {int[] arr {2, 11,4,7,5,22,15,37,12,1};int zjvalue 0;//中间值boolean boofalse; //冒泡比较相邻元素将小的提前打的放后 // 外层循环时用来控制轮数 // 内存循…