引入资源
-
import * as THREE from “three”;
-
import { GLTFLoader } from “three/addons/loaders/GLTFLoader.js”;
-
loadModel(option) {
-
console.log(“option1”, option);
-
let model = null;
-
const loader1 = new GLTFLoader();
-
console.log(“loader1”, loader1);
-
loader1.load(option.url, (gltf) => {
-
model = gltf.scene;
-
model.position.set(option.x, option.y, option.z);
-
// 模型中添加
-
this.scene.add(gltf.scene);
-
});
-
console.log(“model1111”, model);
-
return model;
-
},
使用
-
let option = {
-
url: “./model/CesiumAir/Cesium_Air.glb”,
-
x: 15,
-
y: 5,
-
z: 0,
-
};
-
ffThree.loadModel(option);
异步加载
GLTFLoader
的load
方法是异步的,意味着它会在加载完成前立即返回,并且不会阻塞后续代码的执行。因此,当你在加载完成前访问model
变量时,它仍然是null
,因为加载过程尚未完成。
执行顺序问题
让我们来分析一下你的代码执行顺序:
- 创建loader1实例:
const loader1 = new GLTFLoader();
- 调用loader1.load():
loader1.load(option.url, (gltf) => {...});
- 此时,
loader1.load
开始加载模型,但是它是异步操作,会立即返回,继续执行后续代码。
- 此时,
- 打印model变量:
console.log("model1111", model);
- 在加载完成之前,这行代码会打印
model1111 null
,因为model
还没有被赋值。
- 在加载完成之前,这行代码会打印
- 返回model:
return model;
- 函数会立即返回
null
,因为model
还没有被赋值为加载完成的模型。
- 函数会立即返回
使用Promise对象
一种常见的方法是利用Promise对象或者回调函数来处理异步加载的结果。例如,可以修改你的函数,使其返回一个Promise对象,当模型加载完成时,Promise对象resolve模型对象。
-
loadModelPromise(option) {
-
return new Promise((resolve, reject) => {
-
const loader1 = new GLTFLoader();
-
loader1.load(
-
option.url,
-
(gltf) => {
-
const model = gltf.scene;
-
model.position.set(option.x, option.y, option.z);
-
this.scene.add(model);
-
resolve(model); // 将加载的模型传递给Promise的resolve函数
-
},
-
undefined,
-
reject
-
);
-
});
-
},
loadModel
函数现在返回一个Promise对象,当模型加载成功后,Promise会resolve为加载的模型对象。- 在加载成功的回调函数中,我们通过调用
resolve(model)
来传递加载的模型对象。
使用
-
let option = {
-
url: “./model/CesiumAir/Cesium_Air.glb”,
-
x: –15,
-
y: 5,
-
z: 0,
-
};
-
loadModelPromise(option).then((res) => {
-
console.log(“得到加载的glb模型,可以在这对其修改”, res);
-
// res.scale.set(0.1, 0.1, 0.1);
-
});
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » Three.js 加载glb模型Three.js 加载gltf模型
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » Three.js 加载glb模型Three.js 加载gltf模型
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办