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

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

3天内不再提示

HT 流畅过渡动画 × 场景切换实现方案

图扑-数字孪生 来源:图扑-数字孪生 作者:图扑-数字孪生 2025-09-03 14:49 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在图扑 HT 项目中,尤其是复杂应用里,单一场景或图纸通常难以承载所有需求,因此在多个图纸或场景之间进行切换是一种常见的实现方式。本文将深入解析图扑 HT 项目中场景/图纸切换的核心实现方法,并详细介绍如何为切换过程添加流畅自然的过渡效果,以提升用户体验。

wKgZO2i35PCAToFmAAei5wYc7Ok341.png

场景 / 图纸核心切换步骤

图扑 HT 项目中,实现图纸或场景的无缝切换需严格遵循以下关键步骤,以避免潜在问题并确保切换过程稳定可靠:

  1. 清除当前的数据模型
  2. 使用 dataModel.clear() 清除当前场景关联的所有数据模型。
  3. 反序列化新场景/图纸
  4. 通过 view.deserialize(url) 方法加载并反序列化新的场景或图纸资源文件,完成新场景的载入。

注意:不建议通过创建多个 ht.graph3d.GraphView 进行切换。

原因在于 ht.graph3d.GraphView 是基于 WebGL 的 3D 渲染组件。而多数浏览器对单个页面可运行的 WebGL 上下文数量有严格限制。频繁创建新实例会导致内存泄漏或资源耗尽,引发场景显示异常甚至浏览器崩溃。

场景切换过渡效果

为了在场景切换时获得更流畅、更具视觉吸引力的体验,可以添加过渡动画。常见的实现思路有两种:

利用场景属性实现过渡

通过控制场景的特定属性,在切换过程中产生动态过渡效果,常见的有景深动画和亮度调节等。

景深动画过渡

景深效果主要通过以下两个属性控制:

  • image 属性:模拟景深的贴图(通常为四周黑色、中间透明的 PNG 图片,黑色区域应用景深模糊,透明区域保持清晰)。
  • aperture(孔径)属性:代表中间空白区域的大小,取值范围 0~1,0 表示无景深效果,1 表示景深效果最明显。
wKgZPGi35PGAdy6vADBsqMO5GU0259.gif

实现步骤

使用一张全黑景深贴图(确保整个场景受景深影响),在旧场景切换前开启景深并执行递增孔径值的动画,新场景加载后执行递减孔径值的动画,形成“渐隐渐显”的过渡效果。

let dof = g3d.getPostProcessingModule('Dof');
dof.image = 'assets/景深.png'
dof.aperture = 0
// 景深开启
g3d.enablePostProcessing('Dof', true);
let anim = {
      duration: 800,
      easing: (t: number) => {
         return t * t;
      },
      action: (v: number, t: number) => {
        // 动态设置景深阈值
        dof.aperture = v * 0.2
        }
}
ht.Default.startAnim(anim);

新场景反序列化后,新场景也需要执行景深动画。这时执行的景深动画跟旧场景的景深动画区别在于 action 中的逻辑是递减的过程:dof.aperture =0.2-v*0.2。

wKgZO2i35PKAceGLAD-0Ceg3Sls538.gifwKgZPGi35PSAUHcdADxyVBw7d1Y445.gif

其他属性过渡效果

除景深外,还可通过调节亮度等场景属性实现过渡,原理与景深动画一致:

  • 旧场景切换前,执行属性动画(如亮度逐渐降低至 0,场景变暗);
  • 新场景加载后,执行反向动画(如亮度从 0 逐渐恢复至正常值,场景变亮)。

利用 2D 图纸动画实现过渡

通过在 3D 场景上层叠加 2D 图纸,利用 2D 元素的动画效果遮蔽切换过程,创意自由度更高,为整体呈现带来了更多的艺术动感和技术深度。

帧动画过渡(云朵过渡)

旧场景被“云朵”图片序列逐渐覆盖(遮蔽),切换新场景后,“云朵”再逐渐消散以展现新场景。

wKgZO2i35PaAdj9RADoYPHHgvtI927.gif

实现步骤

  1. 准备一组连续的过渡图片(如从透明到完全遮蔽再到透明的云朵图片序列);
  2. 旧场景切换前,执行动画使图片从初始状态过渡到完全遮蔽场景;
  3. 新场景加载后,执行反向动画使图片从完全遮蔽过渡到消失。

代码示例

const cloudList = [    
    "assets/cloud1.png",
    "assets/cloud2.png",
    ...
    "assets/cloud20.png",
];
const image = this.getDataByTag('cloud');
let i = 0;
ht.Default.startAnim({
    frames: 20,
    interval:50,
    action: (t) => {
        cloudList[i] && image.setImage(cloudList[i]);
    }
})

在新旧场景内执行的动画代码基本一样,区别在于切换前 action 中是从第一张图片切换到最后一张,在新场景反序列化后是从最后一张切换回第一张。

其他创意效果

利用 2D 覆盖层进行过渡的核心优势在于创意自由度极高。开发者可以结合 HT 强大的 2D 动画能力,对覆盖元素应用多种属性动画组合:

  • 渐入渐出的遮罩层动画;
  • 模拟镜头推拉的缩放动画;
  • 基于路径的元素移动动画;
  • ……
wKgZPGi35PiAOPbXAEGCLGXSTzc160.gif

2D 图纸间切换过渡

前文主要探讨了 3D 场景的切换过渡。同样地,在纯 2D 图纸 (ht.graph.GraphView) 之间进行切换时,也可以利用 HT 的 2D 特性实现平滑的过渡效果。一种实用的方法是动态生成并动画化当前视图的缩略图。

利用缩略图过渡

在图纸切换前动态生成缩略图并施加动画,实现平滑过渡的效果,具体的实现步骤:

■生成当前视图缩略图:在触发图纸切换前,使用 gv.toDataURL() 生成当前视图的缩略图。

■创建过渡节点:

生成与图纸视图窗口尺寸相同的节点。

将缩略图设置为该节点的内容。

■应用动画效果:在动画中调整缩略图节点的裁切、透明等属性,以达到过渡效果。

wKgZO2i35PqAIjgNAC9NdSOOBF8233.gif

代码示例

functiongenerateThumbnail() {
     var jsonSerializer = new ht.JSONSerializer(dm); // 创建序列化器,并传入旧图纸的 dm
     jsonSerializer.isSerializable = function (data) { // 过滤节点
         return data.getTag() != 'mask';
     }
     var json = ht.Default.parse(jsonSerializer.serialize()); 
     json.a = {};
     const gv = new ht.graph.GraphView(); // 创建一个新的2D 视图
     gv.dm().deserialize(json); // 反序列化


     const thumbnail = gv.toDataURL(null, null, 1, 0); // 生成缩略图
}
functioncreateThumbnailData(thumbnail){
     const thumbnail_data = new ht.Node(); // 生成缩略图节点
     thumbnail_data.setImage(thumbnail);
     const contentRect = gv.getContentRect(); // 获取所有图元占用的矩形区域
     const rect = div.getBoundingClientRect();// 获取2D视图尺寸
     const width = rect.width;
     const height = rect.height;
     thumbnail_data.p({ x: contentRect.x + contentRect.width / 2, y: contentRect.y + contentRect.height / 2 }) // 为缩略图节点设置位置
     thumbnail_data.setSize({ width, height });// 为缩略图节点设置尺寸
     thumbnail_data.setScale(contentRect.width / width, contentRect.height / height);// 为缩略图节点设置缩放
     thumbnail_data.setAnchor({ x: 0.5, y: 0.5 });
     dm.add(thumbnail_data);


     const mask = dm.getDataByTag('mask'); 
     thumbnail_data.setHost(mask); 
     thumbnail_data.s('clip.host', true); // 开启吸附裁切后,缩略图节点会根据吸附的节点进行裁切


     ht.Default.startAnim({
        duration: 2000,
        easing: function (t) { return t; },
        finishFunc: function () {
              dm.remove(thumbnail_data); // 动画结束后移除缩略图节点
        },
        action: function (v, t) {
              thumbnail_data.s('opacity', 1 - v + 0.1);
              mask.setScaleX(1 - v);
              thumbnail_data.iv();
        }
     });
}


view.mi((e) =>{
  if(e.kind === 'onClick' && e.type === 'data'){
        if(e.data.getTag() === 'switchBtn'){ // 点击按钮切换图纸
        const thumbnail = generateThumbnail(); // 生成缩略图
        ....
        createThumbnailData(thumbnail); // 生成缩略图节点
        ...
      }
    }
})

在图扑软件 HT 项目中实现场景/图纸切换,关键在于遵循 dataModel.clear() + view.deserialize() 的核心步骤,并避免重复创建 ht.graph3d.GraphView 实例。

为了提升用户体验,添加过渡效果是重要环节。无论是通过动态调整场景后处理属性(如景深、亮度)还是利用精心设计的 2D 图纸动画(如帧序列),本质上都是对 HT 引擎灵活性和设计者创意的结合应用。不仅优化了技术流程,更能创造出引人入胜的视觉表现,是当前 Web 可视化项目中的重要实践。

审核编辑 黄宇

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

    关注

    0

    文章

    48

    浏览量

    30967
  • 可视化
    +关注

    关注

    1

    文章

    1372

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于 HT 的新能源电力可视化管控平台技术实现方案

    数据,利用 JavaScript 调用 HT API 完成业务数据与三维场景的联动交互。平台整体遵循轻量化建模 + 前端渲染 + 数据驱动的技术路线,实现电力场景 2D、3D 可视化深
    的头像 发表于 05-14 11:20 282次阅读
    基于 <b class='flag-5'>HT</b> 的新能源电力可视化管控平台技术<b class='flag-5'>实现</b><b class='flag-5'>方案</b>

    乐鑫信息科技EAF动画方案实现高帧率顺滑体验

    乐鑫信息科技 (688018.SH) 推出 EAF (Embedded Animation Format) 动画方案,通过深度优化底层存储逻辑与渲染架构,为资源受限的嵌入式设备提供了一种兼顾高帧率与低内存占用的动画
    的头像 发表于 05-13 09:52 398次阅读

    面向精细化场景的照明定时方案,支持场景定时与渐变时长

    技术问题?选型困惑?点击下方观察市面上的智能照明产品,定时功能大多停留在“定时开关”层面。用户想预约一个具体的灯光场景,或者希望切换时有渐变过渡,基本做不到。不少方案还依赖云端,网络波
    的头像 发表于 05-09 11:41 3872次阅读
    面向精细化<b class='flag-5'>场景</b>的照明定时<b class='flag-5'>方案</b>,支持<b class='flag-5'>场景</b>定时与渐变时长

    基于 HT 的 2.5D 组态可视化技术方案场景实现

    本文所述 2.5D 组态可视化方案,基于图扑软件HT 引擎构建。HT 是依托 WebGL 与 Canvas 实现的纯前端可视化插件,具备 2D/3D 图形渲染、图元组件封装、
    的头像 发表于 04-28 14:13 162次阅读
    基于 <b class='flag-5'>HT</b> 的 2.5D 组态可视化技术<b class='flag-5'>方案</b>与<b class='flag-5'>场景</b><b class='flag-5'>实现</b>

    FBX/glTF 模型渲染与动画技术解析 | 图扑 HT 框架

    Web 3D 渲染框架, 为 FBX/glTF 模型的骨骼动画、材质切换及自定义 Shader 开发提供完善支持 ,可大幅降低开发门槛,提升 3D 应用的开发效率与视觉呈现质量。 FBX/glTF 模型骨骼动画
    的头像 发表于 04-21 11:31 140次阅读
    FBX/glTF 模型渲染与<b class='flag-5'>动画</b>技术解析 | 图扑 <b class='flag-5'>HT</b> 框架

    2026年4大KVM切换方案深度解析:从技术到场景的实用选型指南

    4K/8K超清普及、多设备协同需求激增的当下,KVM切换器早已从“办公工具”升级为“高清场景核心枢纽”——无论是企业会议室的多电脑管控、专业创作者的跨设备协作,还是家庭影院的超清信号切换,都需要稳定
    的头像 发表于 03-31 16:35 448次阅读

    RGBWY方案电源管理:多供电模式如何实现智能、无缝切换

    在这类多电源混合使用场景中常显不足:电源切换时灯光易出现闪烁甚至中断现象,供电效率偏低,且系统无法自动筛选最优电源,进而影响使用体验与灯光呈现效果。 理想的多电源管理,应具备自动识别、智能择优、无缝过渡的核心能力。但传统
    的头像 发表于 03-25 14:15 953次阅读
    RGBWY<b class='flag-5'>方案</b>电源管理:多供电模式如何<b class='flag-5'>实现</b>智能、无缝<b class='flag-5'>切换</b>

    HT for Web 帧动画 | 3D 动态渲染设计与实现

    动画凭借灵活的序列帧设计与精准时序控制,成为图扑软件 HT 可视化项目的核心视觉能力。结合完善的动画体系与性能优化方案,可打造高沉浸、高真实感的数字孪生
    的头像 发表于 03-24 11:05 250次阅读
    <b class='flag-5'>HT</b> for Web 帧<b class='flag-5'>动画</b> | 3D 动态渲染设计与<b class='flag-5'>实现</b>

    HT7180高功率异步升压转换器:便携式系统的高效电源解决方案

    、移动电源、Type-C 供电等场景的核心供电方案,为各类便携设备注入强劲且稳定的电力 HT7180 性能硬核,适配性拉满:拥有 2.7V-12V 宽输入电压范围,完美支持单节、两节锂电池供电
    发表于 03-14 11:18

    双电源冗余供电的静态切换方案有哪些优缺点?

    静态切换(STS,Static Transfer Switch)是双电源冗余供电的高端方案,核心基于晶闸管(SCR)、IGBT 等无机械触点半导体开关实现电源切换,广泛应用于对
    的头像 发表于 02-25 17:20 1452次阅读

    变频器的多段速切换时,如何做到平稳过渡

    在工业自动化控制领域,变频器多段速切换的平稳过渡实现设备高效运行的关键技术。以西门子MM440变频器为例,其内置的多种控制模式(如固定频率设定、模拟量给定、通信控制等)为速度切换提供
    的头像 发表于 12-12 07:42 1263次阅读
    变频器的多段速<b class='flag-5'>切换</b>时,如何做到平稳<b class='flag-5'>过渡</b>

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

    应用中,资源预加载尤为重要,可有效解决首次加载时的卡顿、白屏及交互延迟等问题。 预加载实现方案 01 基础实现原理 HT for Web 中所有资源的请求都会经过
    的头像 发表于 12-01 16:04 1259次阅读
    图扑软件 3D <b class='flag-5'>场景</b>预加载应用<b class='flag-5'>实现</b>

    HT7180单串多串锂电池升压方案2.7V-12V电压10A电流禾润电子一级代理聚能芯半导体原厂技术支持

    在智能硬件、便携设备迭代加速的当下,电源方案的适配性、动力性与安全性成为产品竞争力的核心。禾润 HT7180 宽压升压芯片横空出世,以四大核心优势打破行业瓶颈,为多场景设备提供高效稳定的电源解决
    发表于 11-19 18:02

    鸿蒙5开发宝藏案例分享---体验流畅的首页信息流

    ?** 鸿蒙新闻类首页开发全攻略:流畅动效+懒加载实战** Hey 各位鸿蒙开发者! 今天要分享一个超实用的鸿蒙新闻类首页开发方案,官方文档里藏着的宝藏案例被我挖出来了!从流畅的Tab切换
    发表于 06-12 11:42

    鸿蒙5开发宝藏案例分享---在线短视频流畅切换

    的优化方案躺在那儿,从短视频秒切到金融App防崩溃,连代码都给你打包好了!**最离谱的是,这么硬核的案例库居然没几个人知道? 今天必须当回课代表,把压箱底的黑科技掏出来,尤其那个让短视频切换如德芙般丝滑
    发表于 06-12 11:31