Threejs多个相同格式模型同一页面加载切换

本人能力不足,全是参考了threejs案例修改实现的,如有错误,还望指教

第一步加载GUI(位置有可能不一样)

import {GUI} from 'three/addons/libs/lil-gui.module.min.js';

第二步将你需要在同一页面切换的模型放在一个文件夹内,并且保持模型类型一致,比如有三个模型需要单页面加载切换,那么这三个模型都是同一格式(例如Fbx格式),并且都在同一文件夹(代码示例中路径为/model/fbx/)

第三步Gui选择器修改(注意模型文件名是否正确)

  const assets = [
        '模型测试一',
        '模型测试二',
        '模型测试三'
    ];

加载器修改

loader = new FBXLoader(manager);
        loadAsset(params.asset);

        window.addEventListener('resize', onWindowResize);

        //

        const gui = new GUI();
        gui.add(params, 'asset', assets).onChange(function (value) {

            loadAsset(value);

        });

        gui.add(obj, 'myString')
        gui.add(obj, 'myFunction')

    }

    function loadAsset(asset) {
        loader.load('models/fbx/' + asset + '.fbx', function (group) {
            if (object) {
                object.traverse(function (child) {
                    if (child.material) child.material.dispose();
                    if (child.material && child.material.map) child.material.map.dispose();
                    if (child.geometry) child.geometry.dispose();
                });
                scene.remove(object);
            }
            //

            object = group;
        });
    }

其中loader.load后面的 'models/fbx/' 请修改为自己存放模型文件的路径 ,后面的‘.fbx’ 为你模型的格式

成功样式是这样的

模型可以自由切换,如模型较大,加载需要等待一会

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获取多个模型加载总进度,您可以使用 Three.js 中的 `THREE.LoadingManager` 类,它可以跟踪多个加载项的进度,并在所有加载项完成加载时触发回调函数。 以下是实现此功能的基本步骤: 1. 创建一个 `THREE.LoadingManager` 实例,并指定要加载模型数量。 ```javascript var manager = new THREE.LoadingManager(); manager.setURLModifier(function(url) { return url + "?v=" + Date.now(); // 避免缓存 }); var loader = new THREE.JSONLoader(manager); var totalModels = 3; // 假设要加载3个模型 ``` 2. 监听 `onProgress` 事件,以获取每个加载项的进度,计算总进度。 ```javascript var loadedModels = 0; manager.onProgress = function ( item, loaded, total ) { var progress = (loaded / total * 100).toFixed(2); console.log( "Loading progress: " + progress + "%" ); }; ``` 3. 监听 `onLoad` 事件,以判断所有加载项是否都已完成加载,如果是,则触发回调函数。 ```javascript manager.onLoad = function() { console.log( "All models loaded!" ); // 执行回调函数 callback(); }; ``` 完整的代码示例如下: ```javascript var manager = new THREE.LoadingManager(); manager.setURLModifier(function(url) { return url + "?v=" + Date.now(); // 避免缓存 }); var loader = new THREE.JSONLoader(manager); var totalModels = 3; // 假设要加载3个模型 var loadedModels = 0; manager.onProgress = function ( item, loaded, total ) { var progress = (loaded / total * 100).toFixed(2); console.log( "Loading progress: " + progress + "%" ); }; manager.onLoad = function() { console.log( "All models loaded!" ); // 执行回调函数 callback(); }; loader.load( "model1.json", function ( geometry, materials ) { loadedModels++; } ); loader.load( "model2.json", function ( geometry, materials ) { loadedModels++; } ); loader.load( "model3.json", function ( geometry, materials ) { loadedModels++; } ); ``` 希望这个回答能帮到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值