当前位置: 首页 > news >正文

iClient3D for WebGL ViewCube控件

作者:Emil

目录

一、前言

二、软件版本

三、效果展示

3.1 场景视角变化,同步给ViewCube

3.2 推拽ViewCube ,同步修改场景视角

3.3 点击ViewCube,调整场景固定视角

五、完整示例


一、前言

在三维数字孪生场景中,用户常因场景复杂、视角多变而难以快速定位与高效导航。为应对这一挑战,iClient3D for WebGL ViewCube控件 深度融合BIM领域成熟的ViewCube导航交互逻辑,为全域空间数据可视化提供一体化方向定位与场景操控解决方案。该控件帮助用户以直觉化的方式驾驭三维空间,大幅提升操作效率,是数字孪生及BIM+GIS融合应用中的关键交互支撑。

二、软件版本

supermap-iclient3d-for-webgl_webgpu-12.0.1-251225-49063.zip
链接: https://pan.baidu.com/s/1Evl9Kmm5YnxiL9uBhDVTrQ?pwd=syd9

ViewCube1.0.zip
链接: https://pan.baidu.com/s/1GEGgjPcYZ8e3HY6Z7Go9QA?pwd=kpi8 提取码: kpi8
下载后解压,使用vs code 打开文件夹,选中Model_Viewcube.html文件右键“Open in Live Server”

三、效果展示

3.1 场景视角变化,同步给ViewCube

在场景中调整视角,viewcube 会根据场景相机得方位角,俯仰角,同步修改Viewcube的显示

3.2 推拽ViewCube ,同步修改场景视角

在ViewCube中按住鼠标左键移动,会看到ViewCube在旋转,同时旋转时ViewCube的方位角和俯仰角会同步给场景进行视角调整。

注意事项:

场景调整方位角和俯仰角时,是以屏幕中心拾取到场景中的坐标点为中心。若拾取不到时(例如屏幕中心点为天空)已视角前方100米作为旋转中心点。

3.3 点击ViewCube,调整场景固定视角

在ViewCube中,鼠标移动到立方体上会有对应的高亮块,点击后高亮块后,会调整ViewCube到对应的方位。同时方位值会同步给场景。

注意事项:

若为ViewCube 字段 home 和 distance 赋值,这Viewcube 点击高亮块时,场景视角调整到以home为中心,distance为距离。
若未对ViewCube 字段 home 和 distance 赋值,则与3.2中拖拽ViewCube时中心点计算逻辑一致。

五、完整示例

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> <title>模型视图</title> <link href="./SuperMap3D/Widgets/widgets.css" rel="stylesheet"> <script src="./SuperMap3D/SuperMap3D.js"></script> <script type="text/javascript" src="./viewcube/viewcube.js"></script> </head> <body> <div id="Container"></div> <div class="loading-container"> <div class="circle"></div> </div> <script type="module"> /** * 页面加载完成后的初始化函数 * @param {Object} SuperMap3D - SuperMap3D库对象 */ function onload(SuperMap3D) { // 创建三维场景视图器,配置模型视图功能相关参数 const viewer = new SuperMap3D.Viewer('Container', { contextOptions: { contextType: Number(2), // Webgl2:2 ; WebGPU:3 - 设置渲染引擎类型 msaaLevel: 2, // 多重采样抗锯齿级别 }, timeline: true, // 启用时间轴控件 useSuperMapOIT: true, // 启用SuperMap顺序无关透明度 navigation: false }); // 等待场景初始化完成后执行初始化函数 viewer.scenePromise.then(function (scene) { init(SuperMap3D, scene, viewer); }); } /** * 场景初始化函数,设置模型视图功能 * @param {Object} SuperMap3D - SuperMap3D库对象 * @param {Object} scene - 三维场景对象 * @param {Object} viewer - 视图器对象 */ function init(SuperMap3D, scene, viewer) { // 设置分辨率缩放比例,提高渲染质量 viewer.resolutionScale = window.devicePixelRatio; // 打开动画场景,禁用自动设置视图 const promise = scene.open("http://www.supermapol.com/realspace/services/3D-BIM-new/rest/realspace", undefined, { autoSetView: false }); SuperMap3D.when(promise, function (layers) { document.querySelector('.loading-container').style.display = 'none'; initViewcube(scene, viewer); }) } function initViewcube(scene, viewer) { // 配置场景显示设置 scene.sun.show = true; // 显示太阳 scene.globe.show = false; // 隐藏地球 scene.globe.baseColor = SuperMap3D.Color.BLACK; // 没有影像图层时地球的底色设为黑色 scene.skyAtmosphere.show = false; // 隐藏大气效果 // 获取第一个图层和相关参数 const layer = viewer.scene.layers.layerQueue[0]; // 计算图层包围球,用于确定相机距离 const boundingSphere = layer.boundingSphere || SuperMap3D.BoundingSphere.fromRectangle3D(layer.layerBounds); const distanceScale = 3; // 距离缩放因子 const distance = boundingSphere.radius * distanceScale; // 相机到模型的距离 const matModel = layer._matModel; // 模型变换矩阵 let hprange = new SuperMap3D.HeadingPitchRange(0, -0.1, distance); // 设置相机位置和朝向 viewer.camera.lookAtTransform(matModel, hprange); // 取消相机锁定,恢复自由控制 viewer.camera.lookAtTransform(SuperMap3D.Matrix4.IDENTITY); var viewcube = new ViewCube(viewer, { language: "zh", width: 300, height: 300, home: matModel, distance: distance, }); } // 检查SuperMap3D库是否已加载,如果已加载则启动应用 if (typeof SuperMap3D !== 'undefined') { window.startupCalled = true; onload(SuperMap3D); } </script> </body> </html>
http://www.jsqmd.com/news/211681/

相关文章:

  • PyQt5(十一)如何打包成exe
  • OddAgent:一个通用的意图、指令识别框架
  • 基于Java的宗教人才培养智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • XGBoost早停稳住医疗分类
  • 基于Java的安装生产智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 一文读懂多模态大模型:5大模态!
  • 基于Java的安规检测智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 吐血推荐自考必备AI论文写作软件TOP10
  • 吐血推荐8个AI论文软件,专科生毕业论文轻松搞定!
  • AI模型开发的核心技术:预训练与微调,揭秘大模型进步的关键驱动力!
  • 全新UI简易漂流瓶系统源码
  • Java程序员大模型开发转型宝典:五大步骤助你轻松入门,七大热门岗位高薪详解!
  • 基于Java的安防监控综合智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 亲测有效,86W+!北航硕士亲授大模型学习路线图:从原理到开发!
  • 大数据领域分布式存储中的数据迁移方法
  • 【免费源码】扣扣网易音乐解析UI模版 自适应双端
  • 基于springboot的仁和机构的体检预约系统的设计与实现(源码+论文+部署+安装)
  • 软件测试之学习测试用例的设计(等价类法、边界值法、错误猜测法、场景法、因果图法、正交法)
  • MTools v0.0.8:Windows 媒体人工具箱
  • Fiddler 模拟弱网环境测试
  • LocalAI:无需GPU即可运行的大模型平台!
  • Postman如何做接口测试:如何导入 swagger 接口文档
  • 基于Java的安防监管智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于大数据爬虫+Python+机器学习的电商农产品销售预测系统设计与实现(精品源码+论文+答辩PPT)
  • 大数据领域存算分离的改进措施
  • vue基于springboot框架的在线求医问诊问药系统小程序_0gus2y33
  • 格雷厄姆的工作资本策略:关注流动性
  • 基于智能AI大模型+大数据爬虫采集+机器学习预测算法的农产品销售预测系统设计与实现(精品源码+论文+答辩PPT)
  • 性价比高的口腔种植机构排名
  • FastAPI 的执行模型、Python 并发语义、事件循环(event loop)与线程池调度