引入资源

  1. import * as THREE from “three”;
  2. import { GLTFLoader } from “three/addons/loaders/GLTFLoader.js”;
  1. loadModel(option) {
  2. console.log(“option1”, option);
  3. let model = null;
  4. const loader1 = new GLTFLoader();
  5. console.log(“loader1”, loader1);
  6. loader1.load(option.url, (gltf) => {
  7. model = gltf.scene;
  8. model.position.set(option.x, option.y, option.z);
  9. // 模型中添加
  10. this.scene.add(gltf.scene);
  11. });
  12. console.log(“model1111”, model);
  13. return model;
  14. },

使用

  1. let option = {
  2. url: “./model/CesiumAir/Cesium_Air.glb”,
  3. x: 15,
  4. y: 5,
  5. z: 0,
  6. };
  7. ffThree.loadModel(option);

异步加载

GLTFLoaderload方法是异步的,意味着它会在加载完成前立即返回,并且不会阻塞后续代码的执行。因此,当你在加载完成前访问model变量时,它仍然是null,因为加载过程尚未完成。

执行顺序问题

让我们来分析一下你的代码执行顺序:

  1. 创建loader1实例const loader1 = new GLTFLoader();
  2. 调用loader1.load()loader1.load(option.url, (gltf) => {...});
    • 此时,loader1.load开始加载模型,但是它是异步操作,会立即返回,继续执行后续代码。
  3. 打印model变量console.log("model1111", model);
    • 在加载完成之前,这行代码会打印model1111 null,因为model没有被赋值。
  4. 返回modelreturn model;
    • 函数会立即返回null,因为model还没有被赋值为加载完成的模型。

使用Promise对象 

一种常见的方法是利用Promise对象或者回调函数来处理异步加载的结果。例如,可以修改你的函数,使其返回一个Promise对象,当模型加载完成时,Promise对象resolve模型对象。

  1. loadModelPromise(option) {
  2. return new Promise((resolve, reject) => {
  3. const loader1 = new GLTFLoader();
  4. loader1.load(
  5. option.url,
  6. (gltf) => {
  7. const model = gltf.scene;
  8. model.position.set(option.x, option.y, option.z);
  9. this.scene.add(model);
  10. resolve(model); // 将加载的模型传递给Promise的resolve函数
  11. },
  12. undefined,
  13. reject
  14. );
  15. });
  16. },
  • loadModel函数现在返回一个Promise对象,当模型加载成功后,Promise会resolve为加载的模型对象。
  • 在加载成功的回调函数中,我们通过调用resolve(model)来传递加载的模型对象。

使用

  1. let option = {
  2. url: “./model/CesiumAir/Cesium_Air.glb”,
  3. x: –15,
  4. y: 5,
  5. z: 0,
  6. };
  7. loadModelPromise(option).then((res) => {
  8. console.log(“得到加载的glb模型,可以在这对其修改”, res);
  9. // res.scale.set(0.1, 0.1, 0.1);
  10. });

效果

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

GLB下载网(glbxz.com)gltf文件下载-glb格式下载-模型制作 » Three.js 加载glb模型Three.js 加载gltf模型

常见问题FAQ

免费下载或者VIP会员专享资源能否直接商用?
本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
提示下载要提取码
百度网盘提取码都是gltf。
分享过期和重复下载怎么办
分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
模型和平台不兼容怎么办
可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
  • 7879会员数(个)
  • 16034资源数(个)
  • 40本周更新(个)
  • 39125 今日更新(个)
  • 1139稳定运行(天)

提供最优质的资源集合

加入VIP
开通VIP 享更多特权,建议使用 QQ 登录
×