实现效果:
实现光照效果的代码:(本人直接在vue文件中编写的)
全局定义inter,便于后续的使用。
let inter = null
此时的光照效果为当前时间的光照效果。
viewer.scene.globe.enableLighting = true
viewer.shadows = true
viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY
//viewer.shadowMap.softShadows = true
viewer.shadowMap.darkness = 0.02 //阴影透明度--越大越透明
inter = setInterval(() => {
// 改变时间设置光照效果
let date = new Date().getTime()
let utc = Cesium.JulianDate.fromDate(new Date(date))
//北京时间=UTC+8=GMT+8 不用加8
viewer.clockViewModel.currentTime = Cesium.JulianDate.addHours(utc, 0, new Cesium.JulianDate())
}, 100)
// viewer.scene.light = new Cesium.DirectionalLight({
// //去除时间原因影响模型颜色
// direction: new Cesium.Cartesian3(0.35492591601301104, -0.8909182691839401, -0.2833588392420772)
// })
若想直观上更快的观察到光照效果,可将光照效果加快,即:
viewer.scene.globe.enableLighting = true
viewer.shadows = true
viewer.terrainShadows = Cesium.ShadowMode.RECEIVE_ONLY
viewer.shadowMap.darkness = 0.02 //阴影透明度--越大越透明
let time = 0
inter = setInterval(() => {
// 改变时间设置光照效果
let date = new Date().getTime() + time
let utc = Cesium.JulianDate.fromDate(new Date(date))
//北京时间
viewer.clockViewModel.currentTime = Cesium.JulianDate.addHours(utc, 0, new Cesium.JulianDate())
time = time + 1000 * 60
}, 100)
关闭光照效果的方法:
clearOpenLight() {
viewer.scene.globe.enableLighting = false
viewer.shadows = false
viewer.terrainShadows = Cesium.ShadowMode.DISABLED
if (inter) {
clearInterval(inter)
inter = null
}
}