76 lines
2.1 KiB
JavaScript
76 lines
2.1 KiB
JavaScript
/*
|
|
* @Description: 动态扩散墙的墙体效果(参考开源代码)(不同高度透明度不同)
|
|
* @Version: 1.0
|
|
* @Author: Julian
|
|
* @Date: 2022-03-07 19:50:46
|
|
* @LastEditors: Julian
|
|
* @LastEditTime: 2022-03-08 13:34:04
|
|
*/
|
|
class WallDiffuseMaterialProperty {
|
|
constructor(options) {
|
|
this._definitionChanged = new Cesium.Event();
|
|
this._color = undefined;
|
|
this.color = options.color;
|
|
};
|
|
|
|
get isConstant() {
|
|
return false;
|
|
}
|
|
|
|
get definitionChanged() {
|
|
return this._definitionChanged;
|
|
}
|
|
|
|
getType(time) {
|
|
return Cesium.Material.WallDiffuseMaterialType;
|
|
}
|
|
|
|
getValue(time, result) {
|
|
if (!Cesium.defined(result)) {
|
|
result = {};
|
|
}
|
|
|
|
result.color = Cesium.Property.getValueOrDefault(this._color, time, Cesium.Color.RED, result.color);
|
|
return result
|
|
}
|
|
|
|
equals(other) {
|
|
return (this === other ||
|
|
(other instanceof WallDiffuseMaterialProperty &&
|
|
Cesium.Property.equals(this._color, other._color))
|
|
)
|
|
}
|
|
}
|
|
|
|
Object.defineProperties(WallDiffuseMaterialProperty.prototype, {
|
|
color: Cesium.createPropertyDescriptor('color'),
|
|
})
|
|
|
|
Cesium.WallDiffuseMaterialProperty = WallDiffuseMaterialProperty;
|
|
Cesium.Material.WallDiffuseMaterialProperty = 'WallDiffuseMaterialProperty';
|
|
Cesium.Material.WallDiffuseMaterialType = 'WallDiffuseMaterialType';
|
|
Cesium.Material.WallDiffuseMaterialSource =
|
|
`
|
|
uniform vec4 color;
|
|
czm_material czm_getMaterial(czm_materialInput materialInput){
|
|
czm_material material = czm_getDefaultMaterial(materialInput);
|
|
vec2 st = materialInput.st;
|
|
material.diffuse = color.rgb * 2.0;
|
|
material.alpha = color.a * (1.0 - fract(st.t)) * 0.8;
|
|
return material;
|
|
}
|
|
|
|
`
|
|
|
|
Cesium.Material._materialCache.addMaterial(Cesium.Material.WallDiffuseMaterialType, {
|
|
fabric: {
|
|
type: Cesium.Material.WallDiffuseMaterialType,
|
|
uniforms: {
|
|
color: new Cesium.Color(1.0, 0.0, 0.0, 1.0),
|
|
},
|
|
source: Cesium.Material.WallDiffuseMaterialSource
|
|
},
|
|
translucent: function(material) {
|
|
return true;
|
|
}
|
|
}) |