这里的模型我们使用上篇文章的3dtiles数据。
1查看api:

主要参数:
isPointLight:是否为点光源
darkness:阴影的亮度
lightCamera:通过此设置光源位置
2cesium默认影阴影:
在初始化viewer时开启shadows:
true,可以看到cesium默认的太阳光阴影,这里需要指出如果需要在地形上接收阴影需要开启另外开关:
terrainShadows:
Cesium.ShadowMode.ENABLED。
这个示例全部代码的git示例地址:
https://github.com/YanzheZhang/Cesium.HPUZYZ.Demo/blob/master/Cesium1.43/MyDemos/Tools-40shadowmap1.html
示例代码:
var GoogleMap
=ImageryProviderWebExtendTool.createGoogleMapsByUrl(Cesium, {
url:"http://mt1.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}"});
var viewer =
new Cesium.Viewer('cesiumContainer', {
imageryProvider:
GoogleMap,
creditContainer:
"creditContainer",
selectionIndicator:
true,
animation:
true,
baseLayerPicker:
false,
geocoder:
false,
timeline:
true,
sceneModePicker:
true,
navigationHelpButton:
false,
infoBox:
true,
fullscreenButton:
true,
shadows:
true,
terrainShadows:
Cesium.ShadowMode.ENABLED,
});
var shadowMap
= viewer.shadowMap;//显示时间,调整时间就会出现阴影
shadowMap.maxmimumDistance
= 10000.0;
var tileset =
viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url:
'./sampledata/shp3dtiles1/tileset.json' //
}));
var tileset2
= viewer.scene.primitives.add(new
Cesium.Cesium3DTileset({
url:
'./sampledata/shp3dtiles2/tileset.json'
//
}));
tileset2.style
= new Cesium.Cesium3DTileStyle({
color:
{
conditions:
[
['${height} >= 50.0','color("purple")'],//, 0.5
['${height} >= 20.0','color("red")'],
['true','color("blue")']
]
},
show:
'${height} > 0',
meta:
{
description:
'"Building id ${id} has height ${height}."'
}
});
tileset.readyPromise.then(function
() {
var
boundingSphere = tileset.boundingSphere;
viewer.camera.viewBoundingSphere(boundingSphere,
new Cesium.HeadingPitchRange(0.0,-0.5,
boundingSphere.radius));
viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);
}).otherwise(function
(error) {
throw
(error);
});
viewer.screenSpaceEventHandler.setInputAction(function
onLeftClick(movement){
var
pickedFeature = viewer.scene.pick(movement.position);
if
(Cesium.defined(pickedFeature && pickedFeature._batchId
!=undefined)) {
;
}
},Cesium.ScreenSpaceEventType.LEFT_CLICK);
2自定义点光源
有时候我们会模拟局部的点光源作用下的阴影效果,这里就需要自定义shadowmap的参数来达到要求。
先看效果:

这里我们通过设置以下参数即可实现:
var lightCenter= Cesium.Cartesian3.fromDegrees(116.044, 30.109,
200.0);
var camera =
new Cesium.Camera(viewer.scene);
camera.position = lightCenter;
var
shadowMapTemp = new Cesium.ShadowMap({
context: scene.context,
lightCamera: camera,
maxmimumDistance: 10000.0,
pointLightRadius: 1000.0,
darkness: 0.1,
cascadesEnabled:
false,
isPointLight: true,
softShadows: false
});
shadowMapTemp.enabled = true;
shadowMapTemp.debugShow = true;
scene.shadowMap = shadowMapTemp;
通过camera.position =lightCenter;设置光源位置;
这两个参数控制光源范围:
maxmimumDistance:
10000.0,
pointLightRadius:
1000.0,
控制辅助调试控件显隐:
shadowMapTemp.debugShow= true;
该示例整个代码就不贴出来了,在git中已经上传:
https://github.com/YanzheZhang/Cesium.HPUZYZ.Demo/blob/master/Cesium1.43/MyDemos/Tools-40shadowmap2-pointlight-3dtiles.html。
3 模型阴影
前面两个示例都是演示的3dtiles的阴影,下面效果是利用之前文章中的模型数据做个测试,看对模型是否有效果:

该示例整个代码就不贴出来了,在git中已经上传:
https://github.com/YanzheZhang/Cesium.HPUZYZ.Demo/blob/master/Cesium1.43/MyDemos/Tools-40shadowmap2-pointlight-model.html。
大家有什么问题可以公众号回复交流。
