import * as Cesium from 'cesium'; /** * 定义Cesium材质对象 */ class ImageTrailMaterial { constructor(options = {}) { this._definitionChanged = new Cesium.Event(); this._color = void 0; this._colorSubscription = void 0; this._speed = void 0; this._speedSubscription = void 0; this._image = void 0; this._imageSubscription = void 0; this._repeat = void 0; this._repeatSubscription = void 0; this.color = options.color || Cesium.Color.fromBytes(0, 0, 255, 255); this.speed = options.speed || 1; this.image = options.image; this.repeat = new Cesium.Cartesian2( options.repeat?.x || 1, options.repeat?.y || 1, ); } get isConstant() { return false; } get definitionChanged() { return this._definitionChanged; } getType() { return Cesium.Material.ImageTrailMaterialType; } getValue(time, result) { if (!result) { result = {}; } result.color = Cesium.Property.getValueOrUndefined(this._color, time); result.image = Cesium.Property.getValueOrUndefined(this._image, time); result.repeat = Cesium.Property.getValueOrUndefined(this._repeat, time); result.speed = this._speed; return result; } equals(other) { return ( this === other || (other instanceof ImageTrailMaterial && Cesium.Property.equals(this._color, other._color) && Cesium.Property.equals(this._image, other._image) && Cesium.Property.equals(this._repeat, other._repeat) && Cesium.Property.equals(this._speed, other._speed)) ); } } Object.defineProperties(ImageTrailMaterial.prototype, { color: Cesium.createPropertyDescriptor('color'), speed: Cesium.createPropertyDescriptor('speed'), image: Cesium.createPropertyDescriptor('image'), repeat: Cesium.createPropertyDescriptor('repeat'), }); //材质类型 Cesium.Material.ImageTrailMaterialType = 'PolylineImageTrail'; //添加材质到缓冲区中 Cesium.Material._materialCache.addMaterial( Cesium.Material.ImageTrailMaterialType, { fabric: { type: Cesium.Material.ImageTrailMaterialType, //uniform变量 uniforms: { color: new Cesium.Color(1.0, 0.0, 0.0, 0.7), image: Cesium.Material.DefaultImageId, speed: 1, repeat: new Cesium.Cartesian2(1, 1), }, // source: ` uniform sampler2D image; uniform float speed; uniform vec4 color; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput){ czm_material material=czm_getDefaultMaterial(materialInput); vec2 st=repeat * materialInput.st; float time=fract(czm_frameNumber*speed/1000.); vec4 colorImage=texture2D(image,vec2(fract(st.s-time),st.t)); material.alpha = colorImage.a * color.a; material.diffuse = (colorImage.rgb+color.rgb)/2.0; return material; } `, }, translucent: function () { return true; }, }, ); export default ImageTrailMaterial; //之前的航线材质编写 // source: ` // uniform sampler2D image; // uniform float speed; // uniform vec4 color; // uniform vec2 repeat; // czm_material czm_getMaterial(czm_materialInput materialInput){ // czm_material material=czm_getDefaultMaterial(materialInput); // vec2 st=repeat * materialInput.st; // float time=fract(czm_frameNumber*speed/1000.); // // st.s是横轴方向运动,st.t是纵轴, // // vec2(fract(st.s-time),st.t)是横轴按照时间变化而变化,纵轴保持正常不变化 // vec4 colorImage=texture2D(image,vec2(fract(st.s-time),st.t)); // vec4 fragColor; // fragColor.rgb=color.rgb / 1.0; // if(color.a==0.){ // material.alpha=colorImage.a; // material.diffuse=colorImage.rgb; // }else{ // material.alpha=colorImage.a*color.a; // material.diffuse=max(color.rgb*material.alpha*3.,color.rgb); // } // return material; // } // `