首页 / 浏览问题 / 三维GIS / 问题详情
webgl 3d 双击后场景卡死不动
12EXP 2021年06月16日

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

如示例中, 双击物体(可以尝试双击不同物体,多操作几次)直接卡死不动, 这个是什么情况?

用我的代码,最简单的初始化一个场景, 然后用我的方式加载一个Billboard然后双击 就会卡死

<script>
  viewer = new Cesium.Viewer('cesiumContainer',{
    navigation:false,
    infoBox:false,
    selectionIndicator: false
});
viewer.scene.globe.depthTestAgainstTerrain = false;  

window.billboards = viewer.scene.primitives.add(new Cesium.BillboardCollection());
let pinBuilder = new Cesium.PinBuilder();
let url = Cesium.buildModuleUrl("http://support.supermap.com.cn:8090/webgl/web/img/svg/logo.svg");
Cesium.when( pinBuilder.fromUrl(url, Cesium.Color.BLUE, 48),
    function (canvas) {
        let img = canvas.toDataURL();
      
        billboards.add({
            id:{index:1,  name:'1'},
            position : Cesium.Cartesian3.fromDegrees( 111, 38),
            image : img,
            verticalOrigin: Cesium.VerticalOrigin.BOTTOM
        });
    }
);

</script>

可以在官网的示例中,清空脚本 , 添加这段代码运行, 双击不卡死吗? 有什么解决办法没?

急啊急~, 求帮助

PS: 不存在机器性能问题, 是2W多的外星人PC机

http://qa.supermap.com/71339

这个问题和我的一样, 我的双击Billboard是必然卡住不动, 页面上的dom元素还有响应,就是3d场景就卡死了. 如果我不做双击操作, 正常浏览3D场景, 放大缩小, 拖拽, 偶尔也会卡死, 不是百分之百, 有个10%的机率吧, 偶尔放大的时候就卡住.   双击加载的billboard 卡死,是百分之百, 能帮忙分析一下问题么, 是加载的方式不对?

1个回答

您好,我这边没有出现这样的情况呢。您是有对示例做什么操作嘛?
1,509EXP 2021年06月16日

你一直双击楼体不会吗? 我这双击几次楼体 , 画面就不动了, 在同事那测试,  多操作几次双击操作, 也会出现这种现象,. 你可以试着双击不同的楼体.

我自己代码的现象是:

//初始化
...
...
viewer = new Cesium.Viewer('cesiumContainer',{
    navigation:false,
    infoBox:false,
    selectionIndicator: false
});
scene.globe.depthTestAgainstTerrain = false;
...
...


//获取数据datas,并添加billboard
var bb = viewer.scene.primitives.add(new Cesium.BillboardCollection());
var pinBuilder = new Cesium.PinBuilder();
var url = Cesium.buildModuleUrl("../../resources/markers/marker.png");

Cesium.when( pinBuilder.fromUrl(url, Cesium.Color.ORANGE, 48),
      function (canvas) {
          var img = canvas.toDataURL();
          for(let i= 0; i< datas.length; i++){
                    var data = datas[i];                  
                    bb.add({
                        id:{id:data.id,name:data.name,},
                        position : Cesium.Cartesian3.fromDegrees(data.lng, data.lat),
                        image : img,
                        verticalOrigin: Cesium.VerticalOrigin.BOTTOM
                    });
                }
            }
);
...
...

然后场景中, 双击billboard 就会画面卡死, 和我发的官网demo那个现象一致, 哪里出问题了么

您好,刚刚重现您的问题了,在场景没有渲染完成之前疯狂点击鼠标,确实是说会出现模型卡住不动的这种情况,您等待场景渲染完成再次点击就不会出现这样的情况了。或者说是将您点击鼠标的频率放低一点也是可以的。

1. 我的代码场景还是这样, 后台没有网络请求了, 等上1分钟再点, 还是这样会卡死不动,并且不报任何错误

2. 官网的那个示例, 我就简单操作一下就会卡死.并且 是等了一分钟后台没有网络请求后操作的. 浏览器后台有1个报错:

unzip-b0fc9445.js:1017 Uncaught (in promise) TypeError: Failed to execute 'fetch' on 'WorkerGlobalScope': Failed to parse URL from ThirdParty/unzip.wasm
    at instantiateAsync (unzip-b0fc9445.js:1017)
    at createWasm (unzip-b0fc9445.js:1043)
    at Object.Module.asm (unzip-b0fc9445.js:1067)
    at Object.<anonymous> (unzip-b0fc9445.js:1316)
    at Object.execCb (cesiumWorkerBootstrapper.js:23)
    at e.check (cesiumWorkerBootstrapper.js:23)
    at enable (cesiumWorkerBootstrapper.js:23)
    at e.init (cesiumWorkerBootstrapper.js:23)
    at a (cesiumWorkerBootstrapper.js:23)
    at Object.completeLoad (cesiumWorkerBootstrapper.js:23)

3. 为什么原生Cesium的操作并没出现此问题..

你用我的代码,最简单的初始化一个场景, 然后用我的方式加载一个Billboard然后双击试一下, 看有问题没

...