首页 / 浏览问题 / 三维GIS / 问题详情
想做出类似单体化的贴膜效果
14EXP 2022年12月15日

使用产品:SuperMap iClient3D 11i (2022) SP1 for WebGL 操作系统:win10 x64

数据类型: S3M

问题详细描述: 1.想做到如下图这样的效果,红色的面将模型覆盖。下图是在原生Cesium里通过ClassificationPrimitive完成的!

2.但是在使用SuperMap iClient3D 11i (2022) SP1 for WebGL这个产品时,效果却非常不理想,其只对地形有效果,而对S3M模型没有效果,如下图

下面是我写的代码

 var polygon = this.scene.primitives.add(
      new SuperMap3D.ClassificationPrimitive({
        geometryInstances: new SuperMap3D.GeometryInstance({
          geometry: SuperMap3D.PolygonGeometry.fromPositions({
            positions: positions,
            height: extrudedHeight,
            extrudedHeight: extrudedHeight + 10 ,
          }),
          attributes: {
            // color: SuperMap3D.ColorGeometryInstanceAttribute.fromColor(SuperMap3D.Color.fromCssColorString(color).withAlpha(opacity)),
            color: SuperMap3D.ColorGeometryInstanceAttribute.fromColor(SuperMap3D.Color.RED.withAlpha(opacity)),
          },
          id: 'a',
        }),
        classificationType: SuperMap3D.ClassificationType.S3M_TILE,
      })
    )

3.而我看了你们提供的官方demo单体化的效果也不是我想要的,当我把 红色面赋予高度后,就无法做到覆盖模型的效果了,因为我想要的效果是可以不断调整其面的高度来覆盖模型的不同范围

下图是截取官方demo调整polygon高度后的截图

求大佬们指教

1个回答

您好!使用SuperMap iClient3D 11i (2022) SP1 for WebGL产品实现单体化效果的话您可以参考动态单体化示例。对于不断调整其面的高度来覆盖模型的不同范围,您可以设置矢量面贴对象的底部高程与拉伸高程来控制覆盖模型的范围,效果与参数设置参考下图:

希望可以帮助到您!

1,422EXP 2022年12月16日
谢谢,这个方法前不久看到了。我测试的结果就是,调整面的height,那这个面就无法做到包裹模型的效果,结果如同我的提问截图3;而仅仅只调节GroundPrimitive.bottomAltitude属性,也只有面第一次渲染出来的时候有效果。(因为我想要不断调节polygon的height,以得到其包裹模型的不同范围)

于是我选择使用的方式是:每次要调节时,都将原有的面移除,再创建,并且设置GroundPrimitive.bottomAltitude属性为新的值!

但我感觉这种方式实在有点笨拙,不知道大佬有没有什么好的点子呢?
iClient for WebGL示例的动态单体化实现是通过先制作好单体化矢量面,然后在WebGL中进行点击查询,获取到对应的数据并高亮显示。将每次查询得到的结果用trackingLayer添加标识实体,因此在新的查询之前需要移除之前添加的标识实体。您需要不断调节高度的话,对于GroundPrimitive.bottomAltitude的设置您可以用设置鼠标左键单击回调事件来获取鼠标点击位置的高度信息来传递值调节。
...