首页 / 浏览问题 / 三维GIS / 问题详情
如何修改BIM模型的纹理
6EXP 2023年03月08日

官方提供的白膜服务可以通过以下方式设置纹理:

const url = "http://www.supermapol.com/realspace/services/3D-CQmodel_wireframe_2000/rest/realspace"

scene.open(url).then(function() {
  const layer = scene.layers.find("CQmodel");
  const hypsometricSetting = new Cesium.HypsometricSetting();
  hypsometricSetting.emissionTextureUrl = 'http:localhost:3000/assets/images/纹理19.jpg';
  layer.hypsometricSetting = {
    hypsometricSetting: hypsometricSetting
  };
})

但是改为BIM服务以上方式就报错,例如url改为http://www.supermapol.com/realspace/services/3D-BIMbuilding/rest/realspace:

RuntimeError: Fragment shader failed to compile.  Compile log: ERROR: 0:183: 'czm_getEmissiveTextureColor' : no matching overloaded function found
ERROR: 0:183: '=' : dimension mismatch
ERROR: 0:183: 'assign' : cannot convert from 'highp float' to 'highp 3-component vector of float'

1个回答

您好,

测试的话是没有问题的呢,

直接在官方在线示例测试的。

您可以尝试更换浏览器看看,是否是与浏览器着色器冲突了

4,151EXP 2023年03月08日

您好,我尝试了以下浏览器:

Firefox 版本 102.8.0esr (64 位)

Microsoft Edge 版本 110.0.1587.63 (正式版本) (64 位)

Chrome 版本 110.0.5481.178(正式版本) (64 位)

引用超图官方的资源运行以下代码依然是报错:

//const url =  'http://www.supermapol.com/realspace/services/3D-CQmodel_wireframe_2000/rest/realspace';
  const url = 'http://www.supermapol.com/realspace/services/3D-BIMbuilding/rest/realspace';

  scene.open(url).then(function (layers) {
    scene.camera.setView({
      destination: new Cesium.Cartesian3(-2180753.065987198, 4379023.266141494, 4092583.575045952),
      orientation: {
        heading: 4.0392222751147955,
        pitch: 0.010279641987852584,
        roll: 1.240962888005015e-11
      }
    });
    const layer = layers[0];
    const hypsometricSetting = new Cesium.HypsometricSetting();
    hypsometricSetting.emissionTextureUrl = 'http://support.supermap.com.cn:8090/webgl/Build/Cesium/Assets/Textures/waterNormalsSmall.jpg';
    layer.hypsometricSetting = {
      hypsometricSetting: hypsometricSetting
    };
  });

http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#emissionTexture

 您正在官方示例测试一下,

在上面的这个示例中,打开源码,

将218-231改为:

        var promise = scene.open("http://www.supermapol.com/realspace/services/3D-BIMbuilding/rest/realspace");
        Cesium.when.all(promise, function (layers) {
            //设置相机位置,定位至模型
                scene.camera.setView({
                    destination : new Cesium.Cartesian3(-2180753.065987198,4379023.266141494,4092583.575045952),
                    orientation : {
                        heading : 4.0392222751147955,
                        pitch :0.010279641987852584,
                        roll : 1.240962888005015e-11
                    }
                });


            var layer = scene.layers.find("BIMbuilding");
您看能否运行,如果可以运行的话,对比一下和您的代码逻辑是否有差异。

如果没有差异的话,再把您的代码放到官方示例中尝试运行,看能否生效。

如果可以生效,那么可能是您下载的WebGL版本在这一块是有缺陷的,我这边需要上报一个缺陷。

我在官方示例网站可以正常运行代码,但是在本地就报错,我下载的是SuperMap iClient3D 11i (2022) SP1 for Cesium_CH
请问官方示例网站用的是哪个版本的SDK,打印Cesium.VERSION都是一样的
不是对应的Cesium版本的问题,目前已上报缺陷,缺陷号私聊您,可随时来电咨询缺陷的解决进度。
...