Three.js 监听纹理加载
2023/10/31 0:02:59
本文主要是介绍Three.js 监听纹理加载,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
监听单个材质
我们使用 TextureLoader
的 load()
方法加载纹理时,第一个参数传入纹理的路径,之后还可以多接受3个函数类型的参数。
根据 Three.js 的 TextureLoader.load 文档介绍,这几个参数是:
- 【参数1】
url
: 文件的URL或者路径。 - 【参数2】
onLoad
: 材质加载完时调用 - 【参数3】
onProgress
: 材质加载过程中调用,实例包含total
和loaded
。但文档说了在Three.js r84
时启用了TextureLoader
进度事件。 - 【参数4】
onError
: 在加载错误时被调用。
先上一个官方的例子
// 初始化一个加载器 const loader = new THREE.TextureLoader(); // 加载一个资源 loader.load( // 【参数1】资源URL 'textures/land_ocean_ice_cloud_2048.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
举个例子:
// 省略部分代码 // 设置加载管理器 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.jpg
和 141.jpg
都存在的情况下会这样输出。
假设要加载2个材质,其中一个材质是存在的,另一个材质不存在,就会分别输出每个材质的结果。
// 省略部分代码 // 导入纹理贴图基础贴图 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 监听纹理加载的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26React入门教程:从零开始搭建你的第一个React应用
- 2024-12-25Vue2入门教程:轻松掌握前端开发基础
- 2024-12-25Vue3入门指南:快速搭建你的第一个Vue3项目
- 2024-12-25JS基础知识入门教程
- 2024-12-25React基础知识详解:从入门到初级应用
- 2024-12-25Vue3基础知识详解与实战指南
- 2024-12-25Vue3学习:从入门到初步掌握
- 2024-12-25Vue3入门:新手必读的简单教程
- 2024-12-23【JS逆向百例】爱疯官网登录逆向分析
- 2024-12-21Vue3教程:新手入门到实践应用