2种方法:关于threejs模型加载异步导致问题的解决方案(异步变同步)

1.举个例子:在做模型一键复制时,有两个函数。

首先设置一个全局变量 var copy_time = 0;

这里 number 是指模型复制次数(也就是加载函数执行次数)

一是总触发函数:function start(number){

        single_model(number)

};

二是复制单个模型函数:function single_model(number){

//此处是复制单个模型的操作...(自行添加)

......

        var loader = new THREE.GLTFLoader();        //此处开始每次复制加载模型

        loader.load( strPathFile,function ( object ) {

                            object = object.scene;

                             //然后对模型进行操作...

.......

                                copy_time++;

                                if(copy_time<number)

                                    start();

                                else if(copy_time==number)

                                    copy_time=0;

                        });

}

2.以tds模型举例:

正常情况下:

 loader.load( strPathFile,function ( object )

      {

scene.add( object );

object.position.set(100,100,100)

}

我们改成同步(分三步):

 <1>

this.createModel= async function () {

        

var loader = new THREE.TDSLoader();

var strPathFile =  "xxxxxxxxxxxx.3ds";

const group = new THREE.Group()

await this.move(group,strPathFile)

scene.add( group);

}

<2>

async function  move(group,strPathFile){

// 加载

        const object = await loadPromise(strPathFile);

 //移动操作

        object.position.set(100,100,100);

        group=object;

}

<3>

// 返回Promise的TDSLoader

function loadPromise(path) {

    var loader = new THREE.TDSLoader();

    return new Promise((resolve, reject) =>{

        loader.load(path, object => {

            resolve(object)

        })

    })

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值