SuperMap iClient3D for WebGL如何加载iDesktopX 场景美化绘制资产

作者:姜尔


一、功能介绍

本文主要介绍使用SuperMap iClient3D for WebGL加载SuperMap iDesktopX 场景中,场景美化功能结果。iDesktopX进行资产编辑,绘制区域。设置工程路径,保存美化结果,可以获得.instc以及.s3mb格式的实例化模型。在SuperMap iClient3D for WebGL中,通过接口instanceLayer.add/removeAll即可实现添加或删除实例图层 。

iDesktopX场景美化功能,支持替换材质类型为UE材质的S3M瓦片的材质(仅渲染引擎V2),实现数据美化;也支持在场景中批量添加植被或静态模型。通过场景美化功能,可以开启资产管理器。资产管理器支持查看和编辑材质、植被或静态模型。

  • 材质:通过资产管理器的材质按钮,可以访问软件内置的材质库(存储路径:SuperMap iDesktopX安装路径\templates\Materials),包括混凝土、砖石、金属、塑料、石头等PBR(Physically Based Rendering,基于物理的渲染)材质。若需要在软件中使用更多其他材质素材,将其与默认材质放置在同一路径下即可。
  • 植被:通过资产管理器的植被按钮可以访问软件内置的植被小品库(存储路径:SuperMap iDesktopX安装路径\templates\Assets\Plant\样例),包括法国梧桐、桦树等。若需要在软件中使用更多其他植被小品,将其与默认植被小品放置在同一路径下即可。
  • 静态模型:通过资产管理器的静态模型按钮可以访问软件内置的模型小品库(存储路径:SuperMap iDesktopX安装路径\templates\Assets\Asset),包括人物、城市地块附属物、运动设施、道路附属物等。若需要在软件中使用更多其他小品,将其与默认静态模型放置在同一路径下即可。
  • 具体iDesktopX功能使用详见其帮助文档:https://help.supermap.com/iDesktopX/zh/tutorial/SceneOperation/3DDesigner/ModelOperation/Materialmanager.html?rhsearch=%E5%9C%BA%E6%99%AF%E7%BE%8E%E5%8C%96&rhhlterm=%E5%9C%BA%E6%99%AF%E7%BE%8E%E5%8C%96

SuperMap iClient3D for WebGL中主要使用接口InstanceLayer实例化图层,具体接口方法说明详见:

http://support.supermap.com.cn:8090/webgl/docs/Documentation/InstanceLayer.html?classFilter=InstanceLayer

二、主要代码接口

html 复制代码
instanceLayer.add("./SUModelingWorkDir/Plant/Plant.instc");//添加实例化图层
instanceLayer.removeAll("./SUModelingWorkDir/Plant/Plant.instc");//删除实例化图层

三、全部前端代码

html 复制代码
<!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="../../Build/SuperMap3D/Widgets/widgets.css" rel="stylesheet">
    <link href="./css/pretty.css" rel="stylesheet">
    <script src="./js/jquery.min.js"></script>
     <script src="./js/spectrum.js"></script>
    <script type="text/javascript" src="../../Build/SuperMap3D/SuperMap3D.js"></script>
    <script src="./js/config.js"></script>
</head>
<body>
<div id="Container"></div>

<div id="toolbar" class="param-container tool-bar">
   <button id="batch">批量添加</button>
    <button id="delete">删除</button>
</div>
    
<script>
function onload(SuperMap3D) {
            var viewer = new SuperMap3D.Viewer('Container',{
                contextOptions: {
                  contextType: Number(2)  // Webgl2:2 ; WebGPU:3
                },
                orderIndependentTranslucency : false,
            });

            window.viewer = viewer;
            viewer.scenePromise.then(function (scene) {
                init(SuperMap3D, scene, viewer);
            });
        }

function init(SuperMap3D, scene, viewer) {
     viewer.imageryLayers.addImageryProvider(new SuperMap3D.TiandituImageryProvider({
            credit : new SuperMap3D.Credit('天地图全球影像服务     数据来源:国家地理信息公共服务平台 & 四川省测绘地理信息局'),
            token: URL_CONFIG.TOKEN_TIANDITU
        }));
     const promise = viewer.scene.open("http://localhost:8090/iserver/services/3D-WorkSpace/rest/realspace");
            viewer.scene.debugShowFramesPerSecond = true;
            viewer.resolutionScale = window.devicePixelRatio;
            viewer.scene.screenSpaceCameraController.zoomFactor = 1;
            viewer.scene.screenSpaceCameraController.inertiaZoom = 0.1;
            scene._performancePreferenceMode = 1

         
            const instanceLayer = new SuperMap3D.InstanceLayer(scene._context);
            scene.primitives.add(instanceLayer);
            instanceLayer.minVisibleAltitude = 0;
            instanceLayer.maxVisibleAltitude = 10000000;
            instanceLayer.filterMode = 0;
            instanceLayer.filterPixel = 0; // 对象过滤
            instanceLayer.filterDistance = 8000;
            instanceLayer.tileWidth = 5500;
            instanceLayer.pickEnable = true;
           
            window.instanceLayer = instanceLayer;

         $("#batch").click(function() {
                  instanceLayer.add("./SUModelingWorkDir/Plant/Plant.instc")
                });
                
        $("#delete").click(function() {
                 instanceLayer.removeAll("./SUModelingWorkDir/Plant/Plant.instc");
                });
                
        }
if (typeof SuperMap3D !== 'undefined') {
    window.startupCalled = true;
    onload(SuperMap3D);
}
</script>
<script>document.write('<script src="//' + (location.host || 'localhost').split(':')[0] + ':35929/livereload.js?snipver=1"></' + 'script>')</script><script>document.addEventListener('LiveReloadDisconnect', function() { setTimeout(function() { window.location.reload(); }, 500); })</script></body>
</html>

四、加载效果

操作视频详见:

https://live.csdn.net/v/507511

相关推荐
总要学点什么12 小时前
第104篇:三维特效-流动墙体效果——让贴图沿墙流动,它却只肯走一条对角线
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
西伯利亚小火龙12 小时前
我以为是流体解算,结果只是一张贴图:复刻 Lusion 的屏幕流体特效
webgl·three.js
普通人613 小时前
WebGL与WebGPU入门指南
开发语言·webgl·1024程序员节
魂断蓝桥6662 天前
如何用 three.js 把 3D 消防演练落到一栋楼里——第一课:场景搭建与火情定位
webgl·three.js·3d建筑·物联网3d·、3d工厂、3d工业园区、智慧制造、智慧工业、智慧工厂·3d定位、三维室内定位、3d建筑·3d消防
时间的情敌3 天前
Cesium 建筑单体化、3DTiles 分类、楼层显隐、分户高亮(BIM + 倾斜孪生高频)
前端·3d·cesium
总要学点什么3 天前
第96篇:三维数据加载-城市建筑白模样式+着色器——让色带按体量上色,最白的那档却涂不上去
前端·gis·webgl·cesium·着色器·空间分析·白模
加搜科技观察4 天前
哪个品牌 3D 相机好用?工业 3D 相机品牌选型评估指南
数码相机·3d
总要学点什么4 天前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
Martina_03215 天前
AI生成3D场景的霓虹灯一开就糊成光团?用6步检查Emissive、Bloom与曝光
人工智能·3d·ai·自然语言处理·游戏引擎·材质·贴图
总要学点什么5 天前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质