threeJS 模型过大加载速度慢优化体验

前言

模型一般都比普通的前端项目要大,普通的模型要在1MB,大一点的就上不封顶了。模型越大,电脑加载的时间就越长。为了避免用户判断为bug,或者随便点击导致产生其他bug。我们需要增加进度条来提示用户。

解决方案

增加加载动画

实现代码

    // 导入模型
    function importModel(){
        // 实例化加载器fbx
        const fbxLoader = new FBXLoader();
        // 实例化加载器gltf
        const gltfLoader = new GLTFLoader();
        // 实例化加较器draco -- 为了解决大型模型经过压缩无法直接加载的问题
        const dracoloader = new DRACOLoader();
        dracoloader.setDecoderPath("./draco/");
        // 设置解压模型工具
        gltfLoader.setDRACOLoader(dracoloader);
        // 创建一个Group来存放所有模型
        const group = new THREE.Group();
        // 加载模型的函数
        const loadModels = (urls) => {
            let loadedCount = urls.length;
            urls.forEach((item, index) => {
                if(item.type == 'gltf'){
                    gltfLoader.load(item.url, (gltf) => {
                        if(item.size){
                            gltf.scene.scale.set(item.size,item.size,item.size);// 设置模型渲染大小
                        }else{
                            gltf.scene.scale.set(10,10,10);// 设置模型渲染大小
                        }
                        if(item.pos){
                            gltf.scene.position.set(item.pos.x,item.pos.y,item.pos.z)
                        }else{
                            gltf.scene.position.set(0,0,0);//设置模型位置
                        }
                        group.add(gltf.scene);
                    },
                    (xhr) => {
                        // 计算加载进度百分比
                        let progress = Math.floor((xhr.loaded / xhr.total) * 100);
                        if (progress == 100) isloadModel+=1;
                        let percentage =Math.floor((isloadModel / loadedCount) * 100)
                        document.getElementById("percentage").innerText = percentage
                        if(isloadModel == urls.length){
                            document.getElementById('loading-mark').style.display = 'none'
                        }
                    },
                    // 模型加载错误
                    (error) => {
                        console.log(item.url, 'error');
                    }
                );
                }else{
                    fbxLoader.load(item.url, (model) => {
                        model.scale.set(0.1,0.1,0.1);// 设置模型渲染大小
                        if(item.pos){
                            model.position.set(item.pos.x,item.pos.y,item.pos.z)
                        }else{
                            model.position.set(0,0,0);//设置模型位置
                        }
                        group.add(model);
                    },
                        (xhr) => {
                            // 计算加载进度百分比
                            let progress = Math.floor((xhr.loaded / xhr.total) * 100);
                            if (progress == 100) isloadModel+=1;
                            let percentage =Math.floor((isloadModel / loadedCount) * 100)
                            document.getElementById("percentage").innerText = percentage
                            if(isloadModel == urls.length){
                                document.getElementById('loading-mark').style.display = 'none'
                            }
                        },
                        // 模型加载错误
                        (error) => {
                            console.log(item.url, 'error');
                        }
                    );
                }
            
            });
        };
        // 加载模型并添加到场景
        loadModels(modelList);
        scene.add(group);
    }

效果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/792161.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构③ | 4.6

前言 第4章对应的内容选择题和案例分析都会进行考查,这一章节属于技术相关的内容,学习要以教材为准。本章分值预计在4-5分。 目录 4.6 网络架构 4.6.1 基本原则 4.6.2 局域网架构 4.6.3 广域网架构 4.6.4 移动通信网架构 4.6.5 软件定义网络 4.6…

全网最全,保姆级Stable Diffusion系列入门使用教程(图生图、LoRA、提示词权重),建议收藏!

大家好,我是画画的小强 今天将给大家讲解 Stable Diffusion 入门使用教程的 图生图、LoRA和提示词权重的教程,如果你还没有使用或者安装SD,那么可以看看我的往期入门教程AI绘画『Stable Diffusion』面向小白的免费AI绘画工具:解压…

spark基于Spark的对招聘信息的分析与设计-计算机毕业设计源码50716

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 系统分析 2.1 可行性分析 2.2.1 数据新增流程 2.2.2 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设计 3.1 系统架构设…

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

当前,业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake,和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试,那么本篇文章我们将回归到大数据最基础的场景,对海量数据的批处理查询。本文…

微软子公司Xandr遭隐私诉讼,或面临巨额罚款

近日,欧洲隐私权倡导组织noyb对微软子公司Xandr提起了诉讼,指控其透明度不足,侵犯了欧盟公民的数据访问权。据指控,Xandr的行为涉嫌违反《通用数据保护条例》(GFPR),因其处理信息并创建用于微目…

自动编码器(Autoencoders)

在“深度学习”系列中,我们不会看到如何使用深度学习来解决端到端的复杂问题,就像我们在《A.I. Odyssey》中所做的那样。我们更愿意看看不同的技术,以及一些示例和应用程序。 1、引言 ① 什么是自动编码器(AutoEncoder&#xff…

本地部署,Colorizer: 让黑白图像重现色彩的奇迹

目录 引言 什么是 Colorizer ​编辑​编辑 Colorizer 的特点 工作原理 应用场景 本地部署 本地运行 实验与结果 结语 Tip: 引言 自摄影术发明以来,黑白图像一直是记录历史和艺术创作的重要手段。然而,黑白图像虽然具备其独特的美…

Git常见命令和用法

Git 文件状态 Git 文件 2 种状态: 未跟踪:新文件,从未被 Git 管理过已跟踪:Git 已经知道和管理的文件 常用命令 命令作用注意git -v查看 git 版本git init初始化 git 仓库初始化之后有工作区、暂存区(本地库)、版本库git add 文件标识暂存某个文件文件标识以终…

ts实现将相同类型的数据通过排序放在一起

看下效果&#xff0c;可以将相同表名称的字段放在一起 排序适用于中英文、数字 // 排序 function sortByType(items: any) {// 先按照类型进行排序items.sort((a: any, b: any) > {if (a.label < b.label) return -1;if (a.label > b.label) return 1;return 0;});r…

基于Python/MATLAB长时间序列遥感数据处理及在全球变化、植被物候提取、植被变绿与生态系统固碳分析、生物量估算与趋势分析应用

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…

el-tree 获取当前勾选节点的选中状态以及选中值对象 触发check-change多次事件问题原因

1.需求 现在需要一个树状结构的资产树 但是现在需求是 获取当前选中的值的状态是选中还是取消选中 然后再用当前选中 or 取消选中的值 进行 选中 or 取消选中的操作 一开始使用的是 check-change 方法 接收参数如图 但是我勾选父节点 或者 子节点后 他会打印一堆数据 是因…

华为HCIP Datacom H12-821 卷36

1.单选题 在PIM- SM中&#xff0c;以下关于RP 的描述&#xff0c;错误的是哪一选项? A、在PIM-SM中&#xff0c;组播数据流量不一定必须经过RP的转发。 B、对于一个组播组来说&#xff0c;可以同时有多个RP地址&#xff0c;提升网络可靠性。 C、组播网络中&#xff0c;可以…

Hutool发送Http请求

提示&#xff1a;今天主要学习了使用Hutool的方式来发送Http请求 文章目录 目录 文章目录 一、导库 二、使用 三、调用 四、结果 一、导库 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26&…

Python基础教学之一:入门篇——迈入编程世界的第一步

Python基础教学之一&#xff1a;入门篇——迈入编程世界的第一步 一、Python简介&#xff1a;历史与现状 Python&#xff0c;一种解释型、高级和通用的编程语言&#xff0c;由Guido van Rossum在1989年圣诞节期间创造&#xff0c;并于1991年首次发布。设计哲学强调代码的可读性…

测试与开发高效协作 6大注意事项

测试与开发的高效协作显著提升软件质量&#xff0c;加速问题的检测与修复&#xff0c;节省成本与时间&#xff0c;加强风险管理&#xff0c;确保项目按时按质完成&#xff0c;增强产品市场竞争力。如果测试与开发间协作不顺畅&#xff0c;往往导致团队效率下降&#xff0c;责任…

dify-api的Dockerfile分析

一.dify-api的Dockerfile文件 dify-api的Dockerfile文件如下所示&#xff1a; # base image FROM python:3.10-slim-bookworm AS baseLABEL maintainer"takatostgmail.com"# install packages FROM base as packagesRUN apt-get update \&& apt-get install…

腾讯HR的多维世界:从校招到文化塑造的全面探索

目录 Lyra&#xff1a;海外招聘的沟通桥梁 Moth&#xff1a;文化与活动的创意推手 Yaron&#xff1a;数据与分析的驱动者 腾讯HR的多元价值与成长路径 成就他人&#xff0c;实现自我 多元化团队的协同效应 长期主义与持续成长 企业文化与社会责任的践行者 结语&#x…

电焰灶:烹饪性能的深度剖析

在如今众多的厨房炉灶选择中&#xff0c;华火电焰灶以其独特的技术和性能吸引了不少消费者的目光。那么&#xff0c;华火电焰灶的综合烹饪性能究竟如何呢&#xff1f;让我们一起来深入探究。 首先&#xff0c;从火力方面来看&#xff0c;华火电焰灶展现出了强大的优势。其火焰强…

吹田电气绿色能源 未来可期

在2024年7月的上海慕尼黑电子展上&#xff0c;吹田电气功率分析仪成为了备受瞩目的明星产品。作为电子测试与测量领域的重要工具&#xff0c;功率分析仪在展会上展示了其在绿色能源和高效能量管理方面的最新应用&#xff0c;引发了广泛关注和热议。 领先技术&#xff0c;精准测…

模拟生成高斯随机数序列

模拟和生成高斯随机数序列&#xff08;服从标准正态分布的随机变量&#xff09; Box-Muller 法 & Marsaglia 极坐标法 Box-Muller&#xff1a;使两个独立的均匀分布生成一个高斯分布。 Box-Muller方法的基本思想是利用两个独立的均匀分布随机变量的关系来生成高斯分布的…