首页 / 浏览问题 / 三维GIS / 问题详情
路灯(光源)加载失败。着色器报错
35EXP 2019年09月19日

       有种情况,场景中需要添加很多种路灯(光源)。路灯的坐标数据是从iserver发布查询的,光源数据的数组长度170多。

      for循环中<数组.length,然后查询加载报错, 浏览器控制台一直报着色器相关的错误。然后我觉得可能光源数据太多了,就把光源数量写死,不断缩小只到163,这样光源是可以出来,拖动依旧卡;数组从164往后的光源就加载不出来了,每次加载光源都很卡很慢。

doSqlQuery("SmID>0",URL_CONFIG.ludeng.zxld,URL_CONFIG.fule,function(queryResult){
    //for(var i=0;i<queryResult.result.features.length;i++){   //这样写控制台报错,光源不显示
    for(var i=0;i<163;i++){     //长度写死,加载部分光源不报错,光源显示,拖动场景卡
        var x = Number(queryResult.result.features[i].data.SMX);	//经度
        var y = Number(queryResult.result.features[i].data.SMY);	//纬度
         		 
        //添加路灯
        var pos = new Cesium.Cartesian3.fromDegrees(x, y, 40);
	    var tar= new Cesium.Cartesian3.fromDegrees(x, y, 0);
	    ludeng = new Cesium.SpotLight(pos , tar, spotLightOtionsludeng1_1);        
	    scene.addLightSource(ludeng ); 
    } 
 },function(e){
 	//查询失败回调函数
 	alert("中型路灯坐标查询失败");
 }); 

不过后来,又想了想,也不会因为显卡问题不展示啊,才这么点数据,也不算多,怎么就崩溃了呢?感觉方法写的也木的问题啊,只能坐等高人指点。

1个回答

您好,请问一下您为什么要加这么多的聚光灯呢?实际需求是什么呢?聚光灯比较多是会存在卡顿的情况
6,215EXP 2019年09月19日
项目中要用到,道路上添加路灯,道路多需要路灯。但添加过发光的面,那种情况也不比这个少啊,也出来了,虽然会等几秒,但最起码可以拖动,不算很卡。为什么路灯数据加载报着色器的错呢?
如果是这种情况的话,一般是不会通过前端去加载这么多个光源的。如果您想做路灯灯光打到路面上的效果,您可以在3dsmax做好烘培,然后直接做成模型。如果您想实现对路灯的开光,您可以做个普通的路面,做一个烘培后的路面,开关实现两个模型的显隐切换来实现该效果
明白了,感谢
还想问下,如果清除路灯要用什么清除呢?          scene.imageryLayers.removeAll(spotLightludeng);
scene.removeLightSource(spotLightludeng);  //清除路灯

这两个放到循环里都试过了,还是不行

scene.removeLightSource方法可以的。您可以参考一下这个示例http://support.supermap.com.cn:8090/webgl/examples/editor.html#lightSource

...