0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

图扑软件 3D 场景预加载应用实现

图扑-数字孪生 来源:图扑-数字孪生 作者:图扑-数字孪生 2025-12-01 16:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

预加载是在进入正式场景之前提前加载所需模型、材质、图片等资源的技术手段,其核心价值在于消除资源加载等待,确保场景首次渲染即可完整呈现,从而提供无缝、流畅的用户体验。在复杂的 Web 3D 可视化应用中,资源预加载尤为重要,可有效解决首次加载时的卡顿、白屏及交互延迟等问题。

wKgZPGktS_yAU48EAANjcS5lXJs61.jpeg

预加载实现方案

01 基础实现原理

HT for Web 中所有资源的请求都会经过 ht.Default.convertURL 方法,该方法提供了统一的资源请求入口:

当返回字符串路径时,框架会按此路径发起资源请求;

当返回 {data: content} 格式对象时,框架会直接使用 content 作为资源内容。

基于此特性,我们可实现预加载机制。

// 资源缓存映射表
let sourceMap = {}; 
// 判断是否为本地资源
functionisLocalUrl(url) {
    return url.startsWith('data:') || url.startsWith('blob:');
}
// 重写 convertURL 方法
let oldFunc = ht.Default.convertURL;
ht.Default.convertURL = function(url) {
    if (isLocalUrl(url)) return url;
    
    let source = sourceMap[url];
    if (source) {
        return { data: source };
    }
    
    return oldFunc(url);
};

02 资源加载策略

部分资源预加载适用于资源量较大但部分关键资源需要优先加载的场景。

// 关键资源列表
let resources = [
    "models/model.json",
    "assets/texture.png",
    "symbols/symbols.json"
]
wKgZO2ktS_yAX5BbADkKBsmBpgY458.gif

全量资源预加载获取所有已注册资源进行预加载:

functiongetAllResources() {
    return [
        ...Object.keys(ht.Default.getImageMap()),
        ...Object.keys(ht.Default.getCompTypeMap()),
        ...Object.keys(ht.Default.getShape3dModelMap()),
        ...Object.keys(ht.Default.getMaterialMap()),
        ...Object.keys(ht.Default.getHdrTextureMap())
    ];
}
let allResources = getAllResources();
wKgZPGktS_6ATbnYADcK_TvR-V8855.gif

03 资源加载实现

// 资源类型判断
const ResourceType = {
    IMAGE: /.(png|jpg|gif|jpeg|bmp|svg)$/i,
    BUFFER: /.(fbx|gltf|glb)$/i,
    HDR: /.hdr$/i,
    TGA: /.tga$/i,
    JSON: /.json$/i
};


class ResourceLoader {
constructor(resources) {
        this.resources = resources;
        this.loaded = 0;
    }
    
    load() {
        this.resources.forEach(url => {
            if (ResourceType.BUFFER.test(url)) {
                this.loadBuffer(url);
            } 
            else if (ResourceType.IMAGE.test(url)) {
                this.loadImage(url);
            }
            // 其他资源类型处理...
        });
    }
    
    loadBuffer(url) {
        ht.Default.xhrLoad(url, res => {
            this.onResourceLoaded(url, res);
        }, { responseType: 'arraybuffer' });
    }
    
    // 其他加载方法...
    
    onResourceLoaded(url, res) {
        sourceMap[url] = res;
        this.loaded++;
        this.onProgress(this.loaded, this.resources.length);
        
        if (this.loaded === this.resources.length) {
            this.onAllLoaded();
        }
    }


    // 加载进度回调
  onProgress(loaded, total) {
    console.log(`加载进度: ${loaded}/${total}`);
  };
    
    onAllLoaded() {
        console.log("所有资源预加载完成");
        // 进入主场景...
    }
}
wKgZO2ktTACAHo4cABy_79wUC8Q714.gif

加载页面优化

01 进度展示设计

class LoadingView{
    constructor() {
        this.initView();
    }


    initView(){
        this.dm = new ht.DataModel();
        this.view = new ht.graph.GraphView(this.dm);
        
        let style = this.view.getView().style;
        style.left = "0";
        style.right = "0";
        style.top = "0";
        style.bottom = "0";
        document.body.appendChild(this.view.getView());
    }
    
    // 更新进度
    updateProgress(percent) {
        
    }
    
    // 移除加载页面
    remove() {
        setTimeout(() => {
            this.view.getView().remove();
            this.enterMainScene();
        }, 1);
    }
    
    // 进入主场景
    enterMainScene(){


    }
}

02视觉优化建议

进度条设计:使用图标实现平滑动画。

wKgZPGktTAGAOWK9ADfTX27k4p8260.gif

背景动画:添加轻量级背景动画提升等待体验。

wKgZO2ktTAOAH6WAACTk7Zd1aoQ642.gif

分段进度:将加载过程分为资源加载、场景初始化等阶段。

预估时间:基于已加载时间预测剩余时间。

性能优化方案

01 Service Worker 离线缓存

// sw.js
let CACHE_NAME = 'ht-resources-v1';


self.addEventListener('fetch', event => {
    event.respondWith(caches.match(event.request).then(function (response) {
        if (response !== undefined) {
            return response;
        } else {
            return fetch(event.request).then(function (response) {
                if (event.request.url.indexOf('storage') != -1) {
                    let responseClone = response.clone();
                    caches.open(CACHE_NAME).then(function (cache) {
                        cache.put(event.request, responseClone);
                    });
                }
                return response;
            }).catch(function () {
                return caches.match('./');
            });
        }
    }));
});


self.addEventListener('activate', function (event) {
    event.waitUntil(clients.claim());
    event.waitUntil(
        caches.keys().then(function (keyList) {
            returnPromise.all(keyList.map(function (key) {
                if (key !== CACHE_NAME) {
                    // 删除旧缓存
                    return caches.delete(key);
                }
            }));
        })
    );
});

02 资源压缩策略

■模型优化:轻量化模型,对模型进行减面。

■图片优化:图片资源压缩。

效果对比与总结

01 加载效果对比

预加载方案虽然初始显示时间较长,但提供了更优的整体用户体验:

■完整的场景一次性呈现,避免零碎加载造成的视觉割裂。

■无卡顿的交互体验,所有资源已就绪。

■可控的等待预期,进度反馈降低用户焦虑。

■更稳定的性能表现,避免运行时资源加载导致的卡顿。

wKgZPGktTASAdNgxAAFZpUNk_1I799.gif

预加载效果

wKgZO2ktTASAbIjVAAMF4A7k_YY682.gif

常规加载效果

wKgZPGktTAWALEu3AAEWTja-nE817.jpeg

02 适用场景

大型 3D 场景:包含复杂模型和纹理的场景。

wKgZO2ktTAWAFmsLAD8Ja7Px6S8044.gif

仪表盘应用:需要快速响应的监控系统。

移动端应用:网络条件不稳定的环境。

演示系统:需要流畅演示效果的场合。

03 实施建议

分阶段实施:先对关键资源预加载,再逐步扩展。

性能监控:添加加载时间统计和分析。

A/B 测试:对比不同策略的实际效果。

综上所述,本预加载方案能显著提升 HT for Web 应用的加载性能和用户体验,特别适合对流畅性要求高的可视化应用场景。在实际项目中,应根据资源规模和用户场景灵活调整预加载策略,平衡加载时间和用户体验。

图扑软件 (Hightopo) 长期专注于 Web 可视化领域,自主研发 HT for Web 2D 和 3D 图形渲染引擎、低代码数字孪生组态平台及相关工具。目前产品已广泛应用于工业组态、电力能源、孪生工厂、电信机房、智慧交通、智慧城市、园区楼宇、智慧水务、航天军工等行业领域,为客户提供可靠的一站式数字孪生解决方案。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可视化
    +关注

    关注

    1

    文章

    1319

    浏览量

    22605
  • 数字孪生
    +关注

    关注

    4

    文章

    1620

    浏览量

    13744
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    智慧汽车展示平台全自研技术方案

    ,为车企提供从研发设计到市场推广的一站式可视化解决方案,同时为消费者构建沉浸式产品认知场景。 平台整体基于软件自主研发的 HT for Web 技术体系构建,核心覆盖二三维协同设计
    的头像 发表于 11-21 15:16 100次阅读
    <b class='flag-5'>图</b><b class='flag-5'>扑</b>智慧汽车展示平台全自研技术方案

    邀您相聚 2025 国家工业软件大会

    软件核心技术攻关成果、企业需求与生态体系、应用场景拓展等关键议题展开深入交流。 作为国内外领先的 2D3D 数据可视化前端图形技术解决方案供应商 ,将在 A05 展位 全面展示自
    的头像 发表于 09-24 15:34 321次阅读
    <b class='flag-5'>图</b><b class='flag-5'>扑</b>邀您相聚 2025 国家工业<b class='flag-5'>软件</b>大会

    玩转 KiCad 3D模型的使用

    时间都在与 2D 的焊盘、走线和丝印打交道。但一个完整的产品,终究是要走向物理世界的。元器件的高度、接插件的朝向、与外壳的配合,这些都是 2D 视图难以表达的。 幸运的是,KiCad 提供了强大的 3D 可视化功能。它不仅能让你
    的头像 发表于 09-16 19:21 1.1w次阅读
    玩转 KiCad <b class='flag-5'>3D</b>模型的使用

    iTOF技术,多样化的3D视觉应用

    视觉传感器对于机器信息获取至关重要,正在从二维(2D)发展到三维(3D),在某些方面模仿并超越人类的视觉能力,从而推动创新应用。3D 视觉解决方案大致分为立体视觉、结构光和飞行时间 (TOF) 技术
    发表于 09-05 07:24

    如何提高3D成像设备的部署和设计优势

    3D视觉技术正快速普及,其增长得益于成本下降和软件优化,应用场景从高端工业扩展到制造、物流等领域。该技术通过1-2台3D相机替代多台2D设备
    的头像 发表于 08-06 15:49 458次阅读
    如何提高<b class='flag-5'>3D</b>成像设备的部署和设计优势

    基于 HT 的 3D 可视化智慧矿山开发实现

    软件 Hightopo 作为基于 HTML5 标准的 2D/3D 图形渲染引擎,为 Web 端矿山可视化提供了轻量化、高性能的技术支撑。
    的头像 发表于 07-18 15:49 496次阅读
    基于 HT 的 <b class='flag-5'>3D</b> 可视化智慧矿山开发<b class='flag-5'>实现</b>

    软件邀您相聚第二十届中国国际中小企业博览会

    作为国家级专精特新 “小巨人” 企业,软件将是本次中博会厦门展区的重要数字产品展示窗口。届时将携 Web 端的 UI、2D3D、GIS
    的头像 发表于 06-24 11:45 511次阅读
    <b class='flag-5'>图</b><b class='flag-5'>扑</b><b class='flag-5'>软件</b>邀您相聚第二十届中国国际中小企业博览会

    TechWiz LCD 3D应用:微液晶分子摩擦排布

    ) 结构创建完成后在TechWiz LCD 3D加载并进行相关参数设置 2.2在TechWiz LCD 3D软件中设置微扰方式为用户自定义,并设置微扰角度 2.3其它设置 此例
    发表于 06-10 08:44

    TechWiz LCD 3D应用:挠曲电效用仿真

    完成后在TechWiz LCD 3D加载并进行相关参数设置 2.2在TechWiz LCD 3D软件中开启应用挠曲电效应的功能 2.3其它设置 液晶设置 电压条件设置 光学分
    发表于 05-14 08:55

    数字孪生低空经济 WebGIS 无人机配送

    软件 HT 运用低代码数字孪生工具打造轻量化智慧城市 GIS 低空经济无人机运维监控平台,在空域管理、智慧物流、外卖配送等场景中,实现
    的头像 发表于 04-22 14:46 827次阅读
    数字孪生低空经济 WebGIS 无人机配送

    TechWiz LCD 3D应用:微液晶分子摩擦排布

    ) 结构创建完成后在TechWiz LCD 3D加载并进行相关参数设置 2.2在TechWiz LCD 3D软件中设置微扰方式为用户自定义,并设置微扰角度 2.3其它设置 此例
    发表于 04-01 08:59

    基于 HT 2D&amp;3D 渲染引擎的新能源充电桩可视化运营系统技术剖析

    在新能源汽车产业快速发展的浪潮中,充电桩作为关键配套设施,其运营管理的高效性和智能化愈发重要。软件凭借基于 WebGL 和 Canvas 的 HT 2D3D 渲染引擎依托 WebG
    的头像 发表于 03-20 11:47 726次阅读
    基于 HT 2<b class='flag-5'>D</b>&amp;<b class='flag-5'>3D</b> 渲染引擎的新能源充电桩可视化运营系统技术剖析

    数字孪生:解锁压缩空气储能管控新高度

    在能源转型的关键时期,压缩空气储能凭借其独特优势,成为解决可再生能源间歇性问题、保障可靠能源供应的重要技术。软件(Hightopo)充分发挥其在 Web 2D&
    的头像 发表于 02-26 15:40 839次阅读
    <b class='flag-5'>图</b><b class='flag-5'>扑</b>数字孪生:解锁压缩空气储能管控新高度

    Techwiz LCD 3D案例:LCOS模拟

    LCOS像素尺寸直接减小到理论要求的尺寸会明显导致像素尺寸和LC层厚度的比例过小,使得LCOS中相邻像素之间电场相互干扰产生边缘场效应。 任务描述 使用Techwiz LCD 3D模拟的LCOS结构
    发表于 01-11 13:26

    恭喜!软件荣获 2023 年度福建省科学技术进步奖

    软件林意炜团队以《面向工业互联网的 2D3D 数字孪生可视化引擎技术与产业化应用》内容荣获厦门市科学技术进步奖三等奖。
    的头像 发表于 12-24 16:02 639次阅读
    恭喜!<b class='flag-5'>图</b><b class='flag-5'>扑</b><b class='flag-5'>软件</b>荣获 2023 年度福建省科学技术进步奖