请问怎么给白膜加影子

0 投票

使用产品:超图官方示例  操作系统:win10 x64
数据类型: 在线访问示例 http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#S3MTiles_vector
问题详细描述:示例中,如果隐藏影像底图,怎么给白膜加上影子呢,尝试加上了如下代码:

viewer.scene.sun.show = true;
viewer.scene.globe.enableLighting = true;
viewer.shadows = true;

问题重现步骤:

1.打开http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#S3MTiles_vector

2.删除添加影像底图的代码

viewer.imageryLayers.addImageryProvider(new Cesium.BingMapsImageryProvider({
    url : 'https://dev.virtualearth.net',
    mapStyle : Cesium.BingMapsStyle.AERIAL,
    key : URL_CONFIG.BING_MAP_KEY
}));

3.在删除代码的地方添加

viewer.scene.sun.show = true;
viewer.scene.globe.enableLighting = true;
viewer.shadows = true;

4.运行该代码

结果看到白膜是没有影子的,请问有方法给白膜加上光照的影子吗?谢谢!

1月 12, 2021 分类:  123次浏览 | 用户: ibrucekong 初出茅庐 (20 分)

1个回答

1 投票
 
已采纳
您好,将scene.shadowMap.darkness = 0.3;的值设置小一些,设置越小阴影效果越明显
1月 12, 2021 用户: 卷饼先生 登峰造极 (5,918 分)
采纳于 1月 13, 2021 用户:ibrucekong
谢谢,我将参数设置成0.3后,白膜没出现影子,设置成0.1也没出现,不知道还要设置什么参数?
还需要设置图层的阴影模式以及当前时间,layers[0].shadowType = 2;
            setCurrentTime();
    
            function setCurrentTime() {
                var endTime = new Date('2017-05-13');
                endTime.setHours(16);
                viewer.clock.currentTime = Cesium.JulianDate.fromDate(endTime);
                viewer.clock.multiplier = 1;
                viewer.clock.shouldAnimate = true;
            }
谢谢,终于显示出来了,非常感谢您的帮助

模型间的阴影出来了,但是场景地面和模型都出现了很严重的波纹干扰:

viewer.terrainShadows = Cesium.ShadowMode.ENABLED

请问有遇到过吗?

自答:球体透明度设置的问题,设置为0就好了  不好意思讲错了,更正一下,使用了以下设置后,地面就会消失,地面影子也没了,所以没能解决问题

viewer.scene.globe.globeAlpha = 0; // 背锅侠,不是这兄弟的问题

排查发现原来是不小心开启了柔光(软)阴影,经测确实是它:

var shadowMap = viewer.shadowMap;
shadowMap.softShadows = true; // 是它了

注释之后,波纹消失了。

所以,在不添加任何底图,且删除了默认底图的情况下,如果要显示影子,千万不能开启柔光(软)阴影,不然会出现波纹。

再次感谢对此问题的解答。

客气了您,祝工作、生活愉快
...