SuperMap iClient3D for WebGL平面场景实现绘制任意面进行GPU空间查询

文章目录


前言

写之前先说一下,以往咱们都是在球面场景中绘制一个规则的体对模型图层做GPU空间查询,可参考:https://www.supermapol.com/webgl/examples/webgl/editor.html#spatialQuery3D。最近遇到有些小伙伴问在平面场景中如何绘制任意面对模型进行GPU空间查询,其实核心就是如何把绘制出来的面拉成一个体并让接口能正确识别这个体,以下是实现方法。


一、加载模型缓存服务并获取需要操作的图层

javascript 复制代码
				//设置平面场景
				scene.mode = SuperMap3D.SceneMode.COLUMBUS_VIEW;
				//加载三维缓存服务
                var promise = scene.open("http://localhost:8090/iserver/services/3D-WorkSpace/rest/realspace");

				//获取需要进行操作的图层
				var layerSelect = [];
                var layer = scene.layers.find("Building_1");
                layer.selectedColor = SuperMap3D.Color.RED;
                layerSelect.push(layer);

二、绘制任意面

这里使用DrawHandler

javascript 复制代码
				//初始化handlerPolygon 
				var handlerPolygon = new SuperMap3D.DrawHandler(viewer, SuperMap3D.DrawMode.Polygon, 0);
				handlerPolygon.drawEvt.addEventListener(function (result) {
                        handlerPolygon.polygon.show = false;
                        handlerPolygon.polyline.show = false;
                     });
                     //激活handlerPolygon
                     handlerPolygon.activate();

三、拉伸体

1、获取步骤二所绘制面的节点

此次在步骤二的addEventListener监听里面获取

javascript 复制代码
						for (var pt of result.object.positions) {
                            var cartographic = SuperMap3D.Cartographic.fromCartesian(pt);
                            var longitude = SuperMap3D.Math.toDegrees(cartographic.longitude);
                            var latitude = SuperMap3D.Math.toDegrees(cartographic.latitude);
                            var height = cartographic.height;
                            var pnt = new SuperMap3D.Point3D(longitude, latitude, height);

                            point3ds.add(pnt);
                        }
                        point3dsArray.push(point3ds);

2、拉伸体

javascript 复制代码
						//初始化拉伸体
						var geometry = undefined;
                        geometry = new SuperMap3D.GeoRegion3D(point3dsArray);
                        geometry.extrudedHeight = 100; //拉伸高度
                        geometry.isLatLon = false; //设为false
                        geometry.bottomAltitude = 5; //底部高度

3、进行空间查询

javascript 复制代码
						// 空间查询
                        spatialQuery.geometry = geometry;
                        spatialQuery.positionMode = mode;
                        spatialQuery.layers = layerSelect;
                        spatialQuery.outlineColor = SuperMap3D.Color.CORNFLOWERBLUE;
                        spatialQuery.fillStyle = SuperMap3D.FillStyle.Fill_And_WireFrame;
                        spatialQuery.build();

四、运行效果


相关推荐
山河木马3 小时前
矩阵专题2-怎么创建视图矩阵(uViewMatrix)
javascript·webgl·计算机图形学
山河木马5 天前
矩阵专题1-怎么创建模型矩阵(uModelMatrix)
javascript·webgl·计算机图形学
山河木马6 天前
矩阵专题0-webGL中的矩阵
javascript·webgl·计算机图形学
一颗烂土豆10 天前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
探物 AI13 天前
【3D·感知】从PointNet到PointPillars:如何让自动驾驶汽车“实时“看见3D世界?
3d·自动驾驶·汽车
苏州邦恩精密14 天前
GOM三维扫描在制造中的真实价值:让“修模”从经验动作变成数据动作
人工智能·科技·机器学习·3d·自动化·制造
YHHLAI14 天前
CSS 3D 硬核解析:四个属性手写旋转立方体
前端·css·3d
云飞云共享云桌面14 天前
传统工作站 vs 云飞云共享云桌面:制造业设计云桌面选型深度对比
运维·服务器·前端·网络·3d·架构·制造
LONGZETECH14 天前
无人机仿真教学软件选型实战:5 个硬核技术维度,避开实训建设踩坑
3d·无人机·交互·cocos2d
装不满的克莱因瓶14 天前
了解3D卷积原理——从空间感知到时空建模的深度学习核心算子
人工智能·pytorch·python·深度学习·机器学习·3d·ai