Three.js 0.167.1版本 Cannot read properties of undefined (reading ‘elements‘)

1. 报错情况

报错图片

2. 触发场景

initScene  () {
  const geometry = new THREE.PlaneGeometry(320, 180);
  geometry.rotateX(-Math.PI / 2);
  const texture = textureLoader.loadAsync(require("@/assets/textures/texture.png"));
  const material = new THREE.MeshStandardMaterial({
        map: texture,
        transparent: true
  });
  const mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);
}

3. 问题分析

  • 老版本中这样加载texture是没有问题的,在0.167.1版本中,一直在报错了,让大模型帮忙分析下,可能是纹理加载过程中出现问题。

大模型回答

  • F12查看Network,这个纹理是有被成功请求的。

图片请求成功

  • 于是去查看textureLoader.loadAsync源码
	loadAsync( url, onProgress ) {

		const scope = this;

		return new Promise( function ( resolve, reject ) {

			scope.load( url, resolve, onProgress, reject );

		} );

	}
  • 发现这里最终返回的是一个Promise,于是灵机一动。

4. 问题解决

使用 async, await,问题解决。

// async
async initScene  () {
  const geometry = new THREE.PlaneGeometry(320, 180);
  geometry.rotateX(-Math.PI / 2);
  // await
  const texture = await textureLoader.loadAsync(require("@/assets/textures/texture.png"));
  const material = new THREE.MeshStandardMaterial({
        map: texture,
        transparent: true
  });
  const mesh = new THREE.Mesh(geometry, material);
  scene.add(mesh);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值