learning_cesium/js/lightline2.js

119 lines
2.7 KiB
JavaScript

// import * as Cesium from 'cesium/Cesium'
// import * as Cesium from '../Build/Cesium/Cesium.js'
class PolylineTrailMaterialProperty {
constructor(options) {
options = Cesium.defaultValue(options, Cesium.defaultValue.EMPTY_OBJECT)
this._definitionChanged = new Cesium.Event()
this._color = undefined
this._colorSubscription = undefined
this.color = options.color
this.duration = options.duration
this.trailImage = options.trailImage
this._time = performance.now()
this.length = options.length
}
}
Object.defineProperties(PolylineTrailMaterialProperty.prototype, {
isConstant: {
get: function () {
return false
}
},
definitionChanged: {
get: function () {
return this._definitionChanged
}
},
color: Cesium.createPropertyDescriptor('color')
})
PolylineTrailMaterialProperty.prototype.getType = function (time) {
return 'PolylineTrail'
}
PolylineTrailMaterialProperty.prototype.getValue = function (time, result) {
if (!Cesium.defined(result)) {
result = {}
}
result.color = Cesium.Property.getValueOrClonedDefault(this._color, time, Cesium.Color.WHITE, result.color)
debugger
// result.image = Cesium.Material.PolylineTrailImage
result.image = this.trailImage
result.time = ((performance.now() - this._time) % this.duration) / this.duration
result.length = this.length
return result
}
PolylineTrailMaterialProperty.prototype.equals = function (other) {
return this === other ||
(other instanceof PolylineTrailMaterialProperty &&
Cesium.Property.equals(this._color, other._color))
}
Cesium.Material.PolylineTrailType = 'PolylineTrail'
Cesium.Material.PolylineTrailSource = `czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
vec4 colorImage = texture2D(image, vec2(fract(st.s - time)*length, st.t*length));
material.alpha = colorImage.a * color.a;
material.diffuse = (colorImage.rgb + color.rgb) / 2.0;
return material;
} `
Cesium.Material._materialCache.addMaterial(Cesium.Material.PolylineTrailType, {
fabric: {
type: Cesium.Material.PolylineTrailType,
uniforms: {
color: new Cesium.Color(1.0, 1.0, 1.0, 1.0),
image: '',
time: 0,
length: 0.0
},
source: Cesium.Material.PolylineTrailSource
},
translucent: function (material) {
return true
}
})
Cesium.PolylineTrailMaterialProperty = PolylineTrailMaterialProperty