@antv/l7-layers 2.8.34 → 2.8.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/es/Geometry/index.d.ts +1 -1
  2. package/es/Geometry/index.js +4 -1
  3. package/es/Geometry/index.js.map +1 -1
  4. package/es/Geometry/models/billboard.d.ts +26 -0
  5. package/es/Geometry/models/billboard.js +213 -0
  6. package/es/Geometry/models/billboard.js.map +1 -0
  7. package/es/Geometry/models/index.d.ts +1 -1
  8. package/es/Geometry/models/index.js +3 -1
  9. package/es/Geometry/models/index.js.map +1 -1
  10. package/es/Geometry/models/sprite.js +2 -2
  11. package/es/core/BaseLayer.d.ts +2 -2
  12. package/es/core/BaseLayer.js.map +1 -1
  13. package/es/core/LayerGroup.d.ts +2 -1
  14. package/es/core/LayerGroup.js +5 -0
  15. package/es/core/LayerGroup.js.map +1 -1
  16. package/es/core/interface.d.ts +29 -2
  17. package/es/core/interface.js.map +1 -1
  18. package/es/image/models/image.js.map +1 -1
  19. package/es/index.d.ts +2 -2
  20. package/es/index.js +2 -2
  21. package/es/index.js.map +1 -1
  22. package/es/line/models/arc.js +4 -4
  23. package/es/line/models/arc.js.map +1 -1
  24. package/es/line/models/arc_3d.js +4 -5
  25. package/es/line/models/arc_3d.js.map +1 -1
  26. package/es/line/models/arcmini.js +5 -5
  27. package/es/line/models/arcmini.js.map +1 -1
  28. package/es/line/models/great_circle.js +3 -3
  29. package/es/line/models/great_circle.js.map +1 -1
  30. package/es/line/models/line.js +3 -3
  31. package/es/line/models/line.js.map +1 -1
  32. package/es/line/models/linearline.js +3 -3
  33. package/es/line/models/linearline.js.map +1 -1
  34. package/es/line/models/simpleLine.js +8 -8
  35. package/es/line/models/simpleLine.js.map +1 -1
  36. package/es/line/models/wall.js +5 -5
  37. package/es/line/models/wall.js.map +1 -1
  38. package/es/mask/index.d.ts +1 -4
  39. package/es/mask/index.js.map +1 -1
  40. package/es/mask/models/fill.js.map +1 -1
  41. package/es/plugins/DataMappingPlugin.d.ts +1 -0
  42. package/es/plugins/DataMappingPlugin.js +17 -9
  43. package/es/plugins/DataMappingPlugin.js.map +1 -1
  44. package/es/plugins/FeatureScalePlugin.d.ts +1 -2
  45. package/es/plugins/FeatureScalePlugin.js +42 -33
  46. package/es/plugins/FeatureScalePlugin.js.map +1 -1
  47. package/es/plugins/ShaderUniformPlugin.d.ts +1 -0
  48. package/es/plugins/ShaderUniformPlugin.js +12 -0
  49. package/es/plugins/ShaderUniformPlugin.js.map +1 -1
  50. package/es/point/models/extrude.js +3 -4
  51. package/es/point/models/extrude.js.map +1 -1
  52. package/es/point/models/fill.js +3 -4
  53. package/es/point/models/fill.js.map +1 -1
  54. package/es/point/models/fillmage.d.ts +1 -1
  55. package/es/point/models/fillmage.js +6 -21
  56. package/es/point/models/fillmage.js.map +1 -1
  57. package/es/point/models/icon-font.js +1 -1
  58. package/es/point/models/image.js +4 -4
  59. package/es/point/models/image.js.map +1 -1
  60. package/es/point/models/normal.js +1 -2
  61. package/es/point/models/normal.js.map +1 -1
  62. package/es/point/models/radar.js +5 -18
  63. package/es/point/models/radar.js.map +1 -1
  64. package/es/point/models/simplePoint.js +5 -6
  65. package/es/point/models/simplePoint.js.map +1 -1
  66. package/es/point/models/text.js +4 -4
  67. package/es/point/models/text.js.map +1 -1
  68. package/es/polygon/models/extrude.js +3 -4
  69. package/es/polygon/models/extrude.js.map +1 -1
  70. package/es/polygon/models/fill.d.ts +1 -0
  71. package/es/polygon/models/fill.js +37 -12
  72. package/es/polygon/models/fill.js.map +1 -1
  73. package/es/polygon/models/ocean.js +3 -4
  74. package/es/polygon/models/ocean.js.map +1 -1
  75. package/es/polygon/models/water.js +3 -4
  76. package/es/polygon/models/water.js.map +1 -1
  77. package/es/raster/index.d.ts +3 -3
  78. package/es/raster/index.js +16 -6
  79. package/es/raster/index.js.map +1 -1
  80. package/es/raster/models/index.d.ts +1 -1
  81. package/es/raster/models/index.js +3 -1
  82. package/es/raster/models/index.js.map +1 -1
  83. package/es/raster/models/raste-tile.d.ts +23 -0
  84. package/es/raster/models/raste-tile.js +285 -0
  85. package/es/raster/models/raste-tile.js.map +1 -0
  86. package/es/raster/models/raster.js +2 -0
  87. package/es/raster/models/raster.js.map +1 -1
  88. package/es/wind/index.d.ts +1 -17
  89. package/es/wind/index.js.map +1 -1
  90. package/es/wind/models/utils.d.ts +12 -12
  91. package/es/wind/models/utils.js +6 -5
  92. package/es/wind/models/utils.js.map +1 -1
  93. package/es/wind/models/wind.js.map +1 -1
  94. package/es/wind/models/windRender.js.map +1 -1
  95. package/lib/Geometry/index.js +4 -1
  96. package/lib/Geometry/index.js.map +1 -1
  97. package/lib/Geometry/models/billboard.js +227 -0
  98. package/lib/Geometry/models/billboard.js.map +1 -0
  99. package/lib/Geometry/models/index.js +4 -1
  100. package/lib/Geometry/models/index.js.map +1 -1
  101. package/lib/Geometry/models/sprite.js +2 -2
  102. package/lib/core/BaseLayer.js.map +1 -1
  103. package/lib/core/LayerGroup.js +5 -0
  104. package/lib/core/LayerGroup.js.map +1 -1
  105. package/lib/core/interface.js.map +1 -1
  106. package/lib/image/models/image.js.map +1 -1
  107. package/lib/index.js +29 -8
  108. package/lib/index.js.map +1 -1
  109. package/lib/line/models/arc.js +4 -5
  110. package/lib/line/models/arc.js.map +1 -1
  111. package/lib/line/models/arc_3d.js +4 -6
  112. package/lib/line/models/arc_3d.js.map +1 -1
  113. package/lib/line/models/arcmini.js +5 -6
  114. package/lib/line/models/arcmini.js.map +1 -1
  115. package/lib/line/models/great_circle.js +3 -4
  116. package/lib/line/models/great_circle.js.map +1 -1
  117. package/lib/line/models/line.js +3 -4
  118. package/lib/line/models/line.js.map +1 -1
  119. package/lib/line/models/linearline.js +3 -4
  120. package/lib/line/models/linearline.js.map +1 -1
  121. package/lib/line/models/simpleLine.js +8 -9
  122. package/lib/line/models/simpleLine.js.map +1 -1
  123. package/lib/line/models/wall.js +5 -6
  124. package/lib/line/models/wall.js.map +1 -1
  125. package/lib/mask/index.js.map +1 -1
  126. package/lib/mask/models/fill.js.map +1 -1
  127. package/lib/plugins/DataMappingPlugin.js +17 -9
  128. package/lib/plugins/DataMappingPlugin.js.map +1 -1
  129. package/lib/plugins/FeatureScalePlugin.js +43 -33
  130. package/lib/plugins/FeatureScalePlugin.js.map +1 -1
  131. package/lib/plugins/ShaderUniformPlugin.js +12 -0
  132. package/lib/plugins/ShaderUniformPlugin.js.map +1 -1
  133. package/lib/point/models/extrude.js +3 -5
  134. package/lib/point/models/extrude.js.map +1 -1
  135. package/lib/point/models/fill.js +3 -5
  136. package/lib/point/models/fill.js.map +1 -1
  137. package/lib/point/models/fillmage.js +7 -23
  138. package/lib/point/models/fillmage.js.map +1 -1
  139. package/lib/point/models/icon-font.js +1 -1
  140. package/lib/point/models/image.js +4 -5
  141. package/lib/point/models/image.js.map +1 -1
  142. package/lib/point/models/normal.js +1 -3
  143. package/lib/point/models/normal.js.map +1 -1
  144. package/lib/point/models/radar.js +5 -19
  145. package/lib/point/models/radar.js.map +1 -1
  146. package/lib/point/models/simplePoint.js +5 -7
  147. package/lib/point/models/simplePoint.js.map +1 -1
  148. package/lib/point/models/text.js +4 -5
  149. package/lib/point/models/text.js.map +1 -1
  150. package/lib/polygon/models/extrude.js +3 -5
  151. package/lib/polygon/models/extrude.js.map +1 -1
  152. package/lib/polygon/models/fill.js +37 -13
  153. package/lib/polygon/models/fill.js.map +1 -1
  154. package/lib/polygon/models/ocean.js +3 -5
  155. package/lib/polygon/models/ocean.js.map +1 -1
  156. package/lib/polygon/models/water.js +3 -5
  157. package/lib/polygon/models/water.js.map +1 -1
  158. package/lib/raster/index.js +16 -6
  159. package/lib/raster/index.js.map +1 -1
  160. package/lib/raster/models/index.js +4 -1
  161. package/lib/raster/models/index.js.map +1 -1
  162. package/lib/raster/models/raste-tile.js +294 -0
  163. package/lib/raster/models/raste-tile.js.map +1 -0
  164. package/lib/raster/models/raster.js +2 -0
  165. package/lib/raster/models/raster.js.map +1 -1
  166. package/lib/wind/index.js.map +1 -1
  167. package/lib/wind/models/utils.js +6 -5
  168. package/lib/wind/models/utils.js.map +1 -1
  169. package/lib/wind/models/wind.js.map +1 -1
  170. package/lib/wind/models/windRender.js.map +1 -1
  171. package/package.json +7 -6
  172. package/es/imagetile/index.d.ts +0 -22
  173. package/es/imagetile/index.js +0 -82
  174. package/es/imagetile/index.js.map +0 -1
  175. package/es/imagetile/models/imagetile.d.ts +0 -12
  176. package/es/imagetile/models/imagetile.js +0 -133
  177. package/es/imagetile/models/imagetile.js.map +0 -1
  178. package/es/imagetile/models/index.d.ts +0 -5
  179. package/es/imagetile/models/index.js +0 -6
  180. package/es/imagetile/models/index.js.map +0 -1
  181. package/es/imagetile/utils/ImageTile.d.ts +0 -20
  182. package/es/imagetile/utils/ImageTile.js +0 -92
  183. package/es/imagetile/utils/ImageTile.js.map +0 -1
  184. package/es/imagetile/utils/Tile.d.ts +0 -27
  185. package/es/imagetile/utils/Tile.js +0 -313
  186. package/es/imagetile/utils/Tile.js.map +0 -1
  187. package/es/imagetile/utils/lruCache.d.ts +0 -20
  188. package/es/imagetile/utils/lruCache.js +0 -105
  189. package/es/imagetile/utils/lruCache.js.map +0 -1
  190. package/es/imagetile/utils/tileCache.d.ts +0 -8
  191. package/es/imagetile/utils/tileCache.js +0 -50
  192. package/es/imagetile/utils/tileCache.js.map +0 -1
  193. package/lib/imagetile/index.js +0 -95
  194. package/lib/imagetile/index.js.map +0 -1
  195. package/lib/imagetile/models/imagetile.js +0 -146
  196. package/lib/imagetile/models/imagetile.js.map +0 -1
  197. package/lib/imagetile/models/index.js +0 -17
  198. package/lib/imagetile/models/index.js.map +0 -1
  199. package/lib/imagetile/utils/ImageTile.js +0 -101
  200. package/lib/imagetile/utils/ImageTile.js.map +0 -1
  201. package/lib/imagetile/utils/Tile.js +0 -316
  202. package/lib/imagetile/utils/Tile.js.map +0 -1
  203. package/lib/imagetile/utils/lruCache.js +0 -109
  204. package/lib/imagetile/utils/lruCache.js.map +0 -1
  205. package/lib/imagetile/utils/tileCache.js +0 -58
  206. package/lib/imagetile/utils/tileCache.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["AttributeType","gl","FrequencyController","BaseModel","RasterImageTriangulation","Wind","defaultRampColors","WindModel","frequency","run","drawWind","drawColorMode","Error","createTexture2D","rendererService","source","layer","getSource","texture","height","width","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","getWindSize","imageWidth","imageHeight","options","wind","setWind","image","layerService","updateLayerRenderList","renderLayers","colorModel","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","p1","mapService","lngLatToPixel","p2","Math","floor","x","y","initModels","destroy","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","uniforms","u_opacity","u_texture"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController, isMini } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\ninterface IWindLayerStyleOptions {\n uMin?: number;\n uMax?: number;\n vMin?: number;\n vMax?: number;\n fadeOpacity?: number;\n speedFactor?: number;\n dropRate?: number;\n dropRateBump?: number;\n opacity?: number;\n numParticles?: number;\n rampColors?: {\n [key: number]: string;\n };\n sizeScale?: number;\n}\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n\n public render() {\n // TODO: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels() {\n const { createTexture2D } = this.rendererService;\n\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data.dataArray[0].coordinates as [Point, Point];\n\n source.data.images.then((imageData: HTMLImageElement[]) => {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.sizeScale = sizeScale;\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n\n this.texture = createTexture2D({\n data: imageData[0],\n width: imageData[0].width,\n height: imageData[0].height,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.colorModel = this.layer.buildLayerModel({\n moduleName: 'WindLayer',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n });\n\n return [this.colorModel];\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);\n const imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);\n return { imageWidth, imageHeight };\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {\n this.sizeScale = sizeScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(numParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
1
+ {"version":3,"sources":["../../../src/wind/models/wind.ts"],"names":["AttributeType","gl","FrequencyController","BaseModel","RasterImageTriangulation","Wind","defaultRampColors","WindModel","frequency","run","drawWind","drawColorMode","Error","createTexture2D","rendererService","source","layer","getSource","texture","height","width","glContext","getGLContext","imageCoords","data","dataArray","coordinates","images","then","imageData","getLayerConfig","uMin","uMax","vMin","vMax","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","sizeScale","getWindSize","imageWidth","imageHeight","options","wind","setWind","image","layerService","updateLayerRenderList","renderLayers","colorModel","buildLayerModel","moduleName","vertexShader","WindVert","fragmentShader","WindFrag","triangulation","primitive","TRIANGLES","depth","enable","blend","getBlend","p1","mapService","lngLatToPixel","p2","Math","floor","x","y","initModels","destroy","properties","opacity","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","size","update","feature","featureIdx","vertex","attributeIdx","numParticles","reSize","updateWindDir","updateParticelNum","updateColorRampTexture","draw","d","w","h","setBaseState","uniforms","u_opacity","u_texture"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IEncodeFeature,\n IModel,\n IModelUniform,\n ITexture2D,\n Point,\n} from '@antv/l7-core';\nimport { FrequencyController } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IWindLayerStyleOptions } from '../../core/interface';\nimport { RasterImageTriangulation } from '../../core/triangulation';\nimport WindFrag from '../shaders/wind_frag.glsl';\nimport WindVert from '../shaders/wind_vert.glsl';\nimport { IWind, IWindProps, Wind } from './windRender';\n\nconst defaultRampColors = {\n 0.0: '#3288bd',\n 0.1: '#66c2a5',\n 0.2: '#abdda4',\n 0.3: '#e6f598',\n 0.4: '#fee08b',\n 0.5: '#fdae61',\n 0.6: '#f46d43',\n 1.0: '#d53e4f',\n};\n\nexport default class WindModel extends BaseModel {\n protected texture: ITexture2D;\n\n private colorModel: IModel;\n private wind: IWind;\n private imageCoords: [Point, Point];\n private sizeScale: number = 0.5;\n // https://mapbox.github.io/webgl-wind/demo/\n // source: 'http://nomads.ncep.noaa.gov',\n\n private frequency = new FrequencyController(7.2);\n\n public render() {\n // TODO: 控制风场的平均更新频率\n this.frequency.run(() => {\n this.drawWind();\n });\n this.drawColorMode();\n }\n\n public getUninforms(): IModelUniform {\n throw new Error('Method not implemented.');\n }\n\n public initModels() {\n const { createTexture2D } = this.rendererService;\n\n const source = this.layer.getSource();\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n const glContext = this.rendererService.getGLContext();\n this.imageCoords = source.data.dataArray[0].coordinates as [Point, Point];\n\n source.data.images.then((imageData: HTMLImageElement[]) => {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.sizeScale = sizeScale;\n\n const { imageWidth, imageHeight } = this.getWindSize();\n\n const options: IWindProps = {\n glContext,\n imageWidth,\n imageHeight,\n fadeOpacity,\n speedFactor,\n dropRate,\n dropRateBump,\n rampColors,\n };\n\n this.wind = new Wind(options);\n\n // imageData[0] 风场图\n this.wind.setWind({\n uMin,\n uMax,\n vMin,\n vMax,\n image: imageData[0],\n });\n\n this.texture = createTexture2D({\n data: imageData[0],\n width: imageData[0].width,\n height: imageData[0].height,\n });\n\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n });\n\n this.colorModel = this.layer.buildLayerModel({\n moduleName: 'WindLayer',\n vertexShader: WindVert,\n fragmentShader: WindFrag,\n triangulation: RasterImageTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: false },\n blend: this.getBlend(),\n });\n\n return [this.colorModel];\n }\n\n public getWindSize() {\n const p1 = this.mapService.lngLatToPixel(this.imageCoords[0]);\n const p2 = this.mapService.lngLatToPixel(this.imageCoords[1]);\n\n const imageWidth = Math.floor((p2.x - p1.x) * this.sizeScale);\n const imageHeight = Math.floor((p1.y - p2.y) * this.sizeScale);\n return { imageWidth, imageHeight };\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n this.wind?.destroy();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[3], vertex[4]];\n },\n },\n });\n }\n\n private drawWind() {\n if (this.wind) {\n const {\n uMin = -21.32,\n uMax = 26.8,\n vMin = -21.57,\n vMax = 21.42,\n numParticles = 65535,\n fadeOpacity = 0.996,\n speedFactor = 0.25,\n dropRate = 0.003,\n dropRateBump = 0.01,\n rampColors = defaultRampColors,\n sizeScale = 0.5,\n } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n if (typeof sizeScale === 'number' && sizeScale !== this.sizeScale) {\n this.sizeScale = sizeScale;\n const { imageWidth, imageHeight } = this.getWindSize();\n this.wind.reSize(imageWidth, imageHeight);\n }\n\n this.wind.updateWindDir(uMin, uMax, vMin, vMax);\n\n this.wind.updateParticelNum(numParticles);\n\n this.wind.updateColorRampTexture(rampColors);\n\n this.wind.fadeOpacity = fadeOpacity;\n this.wind.speedFactor = speedFactor;\n this.wind.dropRate = dropRate;\n this.wind.dropRateBump = dropRateBump;\n\n const { d, w, h } = this.wind.draw();\n // TODO: 恢复 L7 渲染流程中 gl 状态\n this.rendererService.setBaseState();\n this.texture.update({\n data: d,\n width: w,\n height: h,\n });\n }\n }\n\n private drawColorMode() {\n const { opacity } = this.layer.getLayerConfig() as IWindLayerStyleOptions;\n this.colorModel.draw({\n uniforms: {\n u_opacity: opacity || 1.0,\n u_texture: this.texture,\n },\n });\n }\n}\n"],"file":"wind.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/wind/models/windRender.ts"],"names":["glUtils","drawFrag","drawVert","fullScreenFrag","fullScreenVert","updateFrag","updateVert","getColorRamp","colors","canvas","document","createElement","ctx","getContext","width","height","gradient","createLinearGradient","Object","keys","stop","addColorStop","fillStyle","fillRect","Uint8Array","getImageData","data","bindAttribute","gl","buffer","attribute","numComponents","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bindFramebuffer","framebuffer","texture","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","Wind","options","glContext","imageWidth","imageHeight","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","init","drawProgram","createProgram","fullScreenProgram","updateProgram","quadBuffer","createBuffer","Float32Array","createFramebuffer","colorRampTexture","createTexture","LINEAR","emptyPixels","backgroundTexture","NEAREST","screenTexture","particleRes","particleStateResolution","Math","ceil","sqrt","numParticles","numParticlesSize","particleState","i","length","floor","random","particleStateTexture0","particleStateTexture1","particleIndices","i$1","particleIndexBuffer","windData","windTexture","createDataTexture","image","num","uMin","uMax","vMin","vMax","isColorChanged","deleteTexture","item","key","Number","bindTexture","drawScreen","updateParticles","d","pixels","w","h","viewport","drawFullTexture","drawParticles","disable","BLEND","readPixels","RGBA","UNSIGNED_BYTE","temp","opacity","program","useProgram","a_pos","uniform1i","u_screen","uniform1f","u_opacity","drawArrays","TRIANGLES","a_index","u_wind","u_particles","u_color_ramp","u_particles_res","uniform2f","u_wind_min","u_wind_max","POINTS","u_rand_seed","u_wind_res","u_speed_factor","u_drop_rate","u_drop_rate_bump","deleteBuffer","deleteFramebuffer","deleteShader","vertexShader","fragmentShader","deleteProgram"],"mappings":"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","sourcesContent":["import * as glUtils from './utils';\nimport {\n drawFrag,\n drawVert,\n fullScreenFrag,\n fullScreenVert,\n updateFrag,\n updateVert,\n} from './windShader';\n\nfunction getColorRamp(colors: { [key: number]: string }) {\n let canvas = document.createElement('canvas') as HTMLCanvasElement;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = 256;\n canvas.height = 1;\n\n const gradient = ctx.createLinearGradient(0, 0, 256, 0);\n for (const stop of Object.keys(colors)) {\n gradient.addColorStop(+stop, colors[+stop]);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n\n // @ts-ignore dispose canvas element\n canvas = null;\n\n return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);\n}\n\nfunction bindAttribute(\n gl: WebGLRenderingContext,\n buffer: any,\n attribute: any,\n numComponents: any,\n) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attribute);\n gl.vertexAttribPointer(attribute, numComponents, gl.FLOAT, false, 0, 0);\n}\n\nfunction bindFramebuffer(\n gl: WebGLRenderingContext,\n framebuffer: any,\n texture: any,\n) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n if (texture) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n }\n}\n\nexport interface IWindData {\n uMin: number;\n uMax: number;\n vMin: number;\n vMax: number;\n image: HTMLImageElement;\n}\n\nexport interface IWind {\n width: number;\n height: number;\n\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n\n setWind: (windData: IWindData) => void;\n draw: () => { d: Uint8Array; w: number; h: number };\n updateParticelNum: (num: number) => void;\n updateWindDir: (\n uMin: number,\n uMax: number,\n vMin: number,\n vMax: number,\n ) => void;\n updateColorRampTexture: (rampColors: { [key: number]: string }) => void;\n\n reSize: (width: number, height: number) => void;\n destroy: () => void;\n}\n\nexport interface IWindProps {\n glContext: WebGLRenderingContext;\n imageWidth: number;\n imageHeight: number;\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n rampColors: { [key: number]: string };\n}\n\nexport class Wind {\n public width: number = 512;\n public height: number = 512;\n\n public pixels: Uint8Array;\n\n public fadeOpacity: number;\n public speedFactor: number;\n public dropRate: number;\n public dropRateBump: number;\n private gl: WebGLRenderingContext;\n private drawProgram: WebGLProgram;\n private fullScreenProgram: WebGLProgram;\n private updateProgram: WebGLProgram;\n\n private rampColors: { [key: number]: string };\n\n private numParticles: number = 65536;\n private numParticlesSize: number;\n private particleStateResolution: number;\n\n private quadBuffer: WebGLBuffer | null;\n private particleIndexBuffer: WebGLBuffer | null;\n\n private framebuffer: WebGLFramebuffer | null;\n\n private colorRampTexture: WebGLTexture | null;\n private backgroundTexture: WebGLTexture | null;\n private screenTexture: WebGLTexture | null;\n private particleStateTexture0: WebGLTexture | null;\n private particleStateTexture1: WebGLTexture | null;\n private windTexture: WebGLTexture | null;\n\n private windData: IWindData;\n\n constructor(options: IWindProps) {\n this.gl = options.glContext;\n this.width = options.imageWidth;\n this.height = options.imageHeight;\n this.fadeOpacity = options.fadeOpacity;\n this.speedFactor = options.speedFactor;\n this.dropRate = options.dropRate;\n this.dropRateBump = options.dropRateBump;\n\n this.rampColors = options.rampColors;\n this.init();\n }\n\n public init() {\n const gl = this.gl;\n\n this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame\n this.speedFactor = 0.25; // how fast the particles move\n this.dropRate = 0.003; // how often the particles move to a random place\n this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed\n\n this.drawProgram = glUtils.createProgram(gl, drawVert, drawFrag);\n this.fullScreenProgram = glUtils.createProgram(\n gl,\n fullScreenVert,\n fullScreenFrag,\n );\n this.updateProgram = glUtils.createProgram(gl, updateVert, updateFrag);\n\n this.quadBuffer = glUtils.createBuffer(\n gl,\n new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n );\n\n this.framebuffer = gl.createFramebuffer();\n\n this.colorRampTexture = glUtils.createTexture(\n this.gl,\n this.gl.LINEAR,\n getColorRamp(this.rampColors),\n 16,\n 16,\n );\n\n const emptyPixels = new Uint8Array(this.width * this.height * 4);\n\n // screen textures to hold the drawn screen for the previous and the current frame\n\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n // particleRes size\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n\n public setWind(windData: IWindData) {\n this.windData = windData;\n this.windTexture = glUtils.createDataTexture(\n this.gl,\n this.gl.LINEAR,\n windData.image,\n );\n }\n\n /**\n * 更新风场粒子数量\n * @param num\n */\n public updateParticelNum(num: number) {\n const gl = this.gl;\n if (num !== this.numParticles) {\n this.numParticles = num; // params number\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n }\n\n /**\n * 更新风场风向风速\n * @param uMin\n * @param uMax\n * @param vMin\n * @param vMax\n */\n public updateWindDir(uMin: number, uMax: number, vMin: number, vMax: number) {\n this.windData.uMin = uMin;\n this.windData.uMax = uMax;\n this.windData.vMin = vMin;\n this.windData.vMax = vMax;\n }\n\n /**\n * update rampColors\n * @param rampColors\n */\n public updateColorRampTexture(rampColors: { [key: number]: string }) {\n if (this.isColorChanged(rampColors)) {\n this.rampColors = rampColors;\n\n const gl = this.gl;\n gl.deleteTexture(this.colorRampTexture);\n this.colorRampTexture = glUtils.createTexture(\n gl,\n gl.LINEAR,\n getColorRamp(rampColors),\n 16,\n 16,\n );\n }\n }\n\n public isColorChanged(rampColors: { [key: number]: string }): boolean {\n const keys = Object.keys(rampColors);\n for (const item of keys) {\n const key = Number(item);\n // exist new key -> color need update\n if (!this.rampColors[key]) {\n return true;\n }\n // value changed -> color need update\n if (this.rampColors[key] && this.rampColors[key] !== rampColors[key]) {\n return true;\n }\n }\n return false;\n }\n\n public reSize(width: number, height: number) {\n if (width !== this.width || height !== this.height) {\n const gl = this.gl;\n gl.deleteTexture(this.backgroundTexture);\n gl.deleteTexture(this.screenTexture);\n\n this.width = width;\n this.height = height;\n const emptyPixels = new Uint8Array(width * height * 4);\n // screen textures to hold the drawn screen for the previous and the current frame\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n }\n }\n\n public draw() {\n if (this.windData?.image) {\n const gl = this.gl;\n\n glUtils.bindTexture(gl, this.windTexture, 0);\n glUtils.bindTexture(gl, this.particleStateTexture0, 1);\n\n this.drawScreen(); // draw Particles into framebuffer\n this.updateParticles();\n\n return { d: this.pixels, w: this.width, h: this.height };\n } else {\n return { d: new Uint8Array([0, 0, 0, 0]), w: 1, h: 1 };\n }\n }\n\n public drawScreen() {\n const gl = this.gl;\n\n // draw the screen into a temporary framebuffer to retain it as the background on the next frame\n bindFramebuffer(gl, this.framebuffer, this.screenTexture);\n\n gl.viewport(0, 0, this.width, this.height);\n\n this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);\n this.drawParticles();\n\n gl.disable(gl.BLEND);\n\n this.pixels = new Uint8Array(4 * this.width * this.height);\n gl.readPixels(\n 0,\n 0,\n this.width,\n this.height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.pixels,\n );\n\n bindFramebuffer(gl, null, null);\n gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n\n // save the current screen as the background for the next frame\n const temp = this.backgroundTexture;\n this.backgroundTexture = this.screenTexture;\n this.screenTexture = temp;\n }\n\n public drawFullTexture(texture: any, opacity: number) {\n const gl = this.gl;\n const program = this.fullScreenProgram as any;\n gl.useProgram(program);\n\n // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(program.a_pos);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n glUtils.bindTexture(gl, texture, 2);\n gl.uniform1i(program.u_screen, 2);\n gl.uniform1f(program.u_opacity, opacity);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n // gl.drawArrays(gl.POINTS, 0, 6);\n }\n\n public drawParticles() {\n const gl = this.gl;\n const program = this.drawProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);\n glUtils.bindTexture(gl, this.colorRampTexture, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n gl.uniform1i(program.u_color_ramp, 2);\n\n gl.uniform1f(program.u_particles_res, this.particleStateResolution);\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n\n gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);\n }\n\n public updateParticles() {\n const gl = this.gl;\n bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);\n gl.viewport(\n 0,\n 0,\n this.particleStateResolution,\n this.particleStateResolution,\n );\n\n const program = this.updateProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n\n gl.uniform1f(program.u_rand_seed, Math.random());\n gl.uniform2f(\n program.u_wind_res,\n this.windData.image.width * 2,\n this.windData.image.height * 2,\n );\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n gl.uniform1f(program.u_speed_factor, this.speedFactor);\n gl.uniform1f(program.u_drop_rate, this.dropRate);\n gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // swap the particle state textures so the new one becomes the current one\n const temp = this.particleStateTexture0;\n this.particleStateTexture0 = this.particleStateTexture1;\n this.particleStateTexture1 = temp;\n\n bindFramebuffer(gl, null, null);\n\n // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n }\n\n public destroy() {\n // private drawProgram: WebGLProgram;\n // private fullScreenProgram: WebGLProgram;\n // private updateProgram: WebGLProgram;\n\n // private quadBuffer: WebGLBuffer | null;\n // private particleIndexBuffer: WebGLBuffer | null;\n\n // private framebuffer: WebGLFramebuffer | null;\n\n // private colorRampTexture: WebGLTexture | null;\n // private backgroundTexture: WebGLTexture | null;\n // private screenTexture: WebGLTexture | null;\n // private particleStateTexture0: WebGLTexture | null;\n // private particleStateTexture1: WebGLTexture | null;\n // private windTexture: WebGLTexture | null;\n\n this.gl.deleteBuffer(this.quadBuffer);\n this.gl.deleteBuffer(this.particleIndexBuffer);\n\n this.gl.deleteFramebuffer(this.framebuffer);\n\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.fragmentShader);\n this.gl.deleteProgram(this.drawProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.fragmentShader);\n this.gl.deleteProgram(this.fullScreenProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.fragmentShader);\n this.gl.deleteProgram(this.updateProgram);\n\n this.gl.deleteTexture(this.colorRampTexture);\n this.gl.deleteTexture(this.backgroundTexture);\n this.gl.deleteTexture(this.screenTexture);\n this.gl.deleteTexture(this.particleStateTexture0);\n this.gl.deleteTexture(this.particleStateTexture1);\n this.gl.deleteTexture(this.windTexture);\n }\n}\n"],"file":"windRender.js"}
1
+ {"version":3,"sources":["../../../src/wind/models/windRender.ts"],"names":["glUtils","drawFrag","drawVert","fullScreenFrag","fullScreenVert","updateFrag","updateVert","getColorRamp","colors","canvas","document","createElement","ctx","getContext","width","height","gradient","createLinearGradient","Object","keys","stop","addColorStop","fillStyle","fillRect","Uint8Array","getImageData","data","bindAttribute","gl","buffer","attribute","numComponents","bindBuffer","ARRAY_BUFFER","enableVertexAttribArray","vertexAttribPointer","FLOAT","bindFramebuffer","framebuffer","texture","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","TEXTURE_2D","Wind","options","glContext","imageWidth","imageHeight","fadeOpacity","speedFactor","dropRate","dropRateBump","rampColors","init","drawProgram","createProgram","fullScreenProgram","updateProgram","quadBuffer","createBuffer","Float32Array","createFramebuffer","colorRampTexture","createTexture","LINEAR","emptyPixels","backgroundTexture","NEAREST","screenTexture","particleRes","particleStateResolution","Math","ceil","sqrt","numParticles","numParticlesSize","particleState","i","length","floor","random","particleStateTexture0","particleStateTexture1","particleIndices","i$1","particleIndexBuffer","windData","windTexture","createDataTexture","image","num","uMin","uMax","vMin","vMax","isColorChanged","deleteTexture","item","key","Number","bindTexture","drawScreen","updateParticles","d","pixels","w","h","viewport","drawFullTexture","drawParticles","disable","BLEND","readPixels","RGBA","UNSIGNED_BYTE","temp","opacity","program","useProgram","a_pos","uniform1i","u_screen","uniform1f","u_opacity","drawArrays","TRIANGLES","a_index","u_wind","u_particles","u_color_ramp","u_particles_res","uniform2f","u_wind_min","u_wind_max","POINTS","u_rand_seed","u_wind_res","u_speed_factor","u_drop_rate","u_drop_rate_bump","deleteBuffer","deleteFramebuffer","deleteShader","vertexShader","fragmentShader","deleteProgram"],"mappings":"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","sourcesContent":["import * as glUtils from './utils';\nimport {\n drawFrag,\n drawVert,\n fullScreenFrag,\n fullScreenVert,\n updateFrag,\n updateVert,\n} from './windShader';\n\nfunction getColorRamp(colors: { [key: number]: string }) {\n let canvas = document.createElement('canvas') as HTMLCanvasElement;\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\n\n canvas.width = 256;\n canvas.height = 1;\n\n const gradient = ctx.createLinearGradient(0, 0, 256, 0);\n for (const stop of Object.keys(colors)) {\n gradient.addColorStop(+stop, colors[+stop]);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 256, 1);\n\n // @ts-ignore dispose canvas element\n canvas = null;\n\n return new Uint8Array(ctx.getImageData(0, 0, 256, 1).data);\n}\n\nfunction bindAttribute(\n gl: WebGLRenderingContext,\n buffer: any,\n attribute: any,\n numComponents: any,\n) {\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.enableVertexAttribArray(attribute);\n gl.vertexAttribPointer(attribute, numComponents, gl.FLOAT, false, 0, 0);\n}\n\nfunction bindFramebuffer(\n gl: WebGLRenderingContext,\n framebuffer: any,\n texture: any,\n) {\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n if (texture) {\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0,\n );\n }\n}\n\nexport interface IWindData {\n uMin: number;\n uMax: number;\n vMin: number;\n vMax: number;\n image: HTMLImageElement;\n}\n\nexport interface IWind {\n width: number;\n height: number;\n\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n\n setWind: (windData: IWindData) => void;\n draw: () => { d: Uint8Array; w: number; h: number };\n updateParticelNum: (num: number) => void;\n updateWindDir: (\n uMin: number,\n uMax: number,\n vMin: number,\n vMax: number,\n ) => void;\n updateColorRampTexture: (rampColors: { [key: number]: string }) => void;\n\n reSize: (width: number, height: number) => void;\n destroy: () => void;\n}\n\nexport interface IWindProps {\n glContext: WebGLRenderingContext;\n imageWidth: number;\n imageHeight: number;\n fadeOpacity: number;\n speedFactor: number;\n dropRate: number;\n dropRateBump: number;\n rampColors: { [key: number]: string };\n}\n\nexport class Wind {\n public width: number = 512;\n public height: number = 512;\n\n public pixels: Uint8Array;\n\n public fadeOpacity: number;\n public speedFactor: number;\n public dropRate: number;\n public dropRateBump: number;\n private gl: WebGLRenderingContext;\n private drawProgram: WebGLProgram;\n private fullScreenProgram: WebGLProgram;\n private updateProgram: WebGLProgram;\n\n private rampColors: { [key: number]: string };\n\n private numParticles: number = 65536;\n private numParticlesSize: number;\n private particleStateResolution: number;\n\n private quadBuffer: WebGLBuffer | null;\n private particleIndexBuffer: WebGLBuffer | null;\n\n private framebuffer: WebGLFramebuffer | null;\n\n private colorRampTexture: WebGLTexture | null;\n private backgroundTexture: WebGLTexture | null;\n private screenTexture: WebGLTexture | null;\n private particleStateTexture0: WebGLTexture | null;\n private particleStateTexture1: WebGLTexture | null;\n private windTexture: WebGLTexture | null;\n\n private windData: IWindData;\n\n constructor(options: IWindProps) {\n this.gl = options.glContext;\n this.width = options.imageWidth;\n this.height = options.imageHeight;\n this.fadeOpacity = options.fadeOpacity;\n this.speedFactor = options.speedFactor;\n this.dropRate = options.dropRate;\n this.dropRateBump = options.dropRateBump;\n\n this.rampColors = options.rampColors;\n this.init();\n }\n\n public init() {\n const gl = this.gl;\n\n this.fadeOpacity = 0.996; // how fast the particle trails fade on each frame\n this.speedFactor = 0.25; // how fast the particles move\n this.dropRate = 0.003; // how often the particles move to a random place\n this.dropRateBump = 0.01; // drop rate increase relative to individual particle speed\n\n this.drawProgram = glUtils.createProgram(\n gl,\n drawVert,\n drawFrag,\n ) as WebGLProgram;\n this.fullScreenProgram = glUtils.createProgram(\n gl,\n fullScreenVert,\n fullScreenFrag,\n ) as WebGLProgram;\n this.updateProgram = glUtils.createProgram(\n gl,\n updateVert,\n updateFrag,\n ) as WebGLProgram;\n\n this.quadBuffer = glUtils.createBuffer(\n gl,\n new Float32Array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]),\n );\n\n this.framebuffer = gl.createFramebuffer();\n\n this.colorRampTexture = glUtils.createTexture(\n this.gl,\n this.gl.LINEAR,\n getColorRamp(this.rampColors),\n 16,\n 16,\n );\n\n const emptyPixels = new Uint8Array(this.width * this.height * 4);\n\n // screen textures to hold the drawn screen for the previous and the current frame\n\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n this.width,\n this.height,\n );\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n // particleRes size\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n\n public setWind(windData: IWindData) {\n this.windData = windData;\n this.windTexture = glUtils.createDataTexture(\n this.gl,\n this.gl.LINEAR,\n windData.image,\n );\n }\n\n /**\n * 更新风场粒子数量\n * @param num\n */\n public updateParticelNum(num: number) {\n const gl = this.gl;\n if (num !== this.numParticles) {\n this.numParticles = num; // params number\n\n // we create a square texture where each pixel will hold a particle position encoded as RGBA\n const particleRes = (this.particleStateResolution = Math.ceil(\n Math.sqrt(this.numParticles),\n ));\n this.numParticlesSize = particleRes * particleRes;\n\n const particleState = new Uint8Array(this.numParticlesSize * 4);\n for (let i = 0; i < particleState.length; i++) {\n particleState[i] = Math.floor(Math.random() * 256); // randomize the initial particle positions\n }\n // textures to hold the particle state for the current and the next frame\n this.particleStateTexture0 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n this.particleStateTexture1 = glUtils.createTexture(\n gl,\n gl.NEAREST,\n particleState,\n particleRes,\n particleRes,\n );\n\n const particleIndices = new Float32Array(this.numParticlesSize);\n for (let i$1 = 0; i$1 < this.numParticlesSize; i$1++) {\n particleIndices[i$1] = i$1;\n }\n this.particleIndexBuffer = glUtils.createBuffer(gl, particleIndices);\n }\n }\n\n /**\n * 更新风场风向风速\n * @param uMin\n * @param uMax\n * @param vMin\n * @param vMax\n */\n public updateWindDir(uMin: number, uMax: number, vMin: number, vMax: number) {\n this.windData.uMin = uMin;\n this.windData.uMax = uMax;\n this.windData.vMin = vMin;\n this.windData.vMax = vMax;\n }\n\n /**\n * update rampColors\n * @param rampColors\n */\n public updateColorRampTexture(rampColors: { [key: number]: string }) {\n if (this.isColorChanged(rampColors)) {\n this.rampColors = rampColors;\n\n const gl = this.gl;\n gl.deleteTexture(this.colorRampTexture);\n this.colorRampTexture = glUtils.createTexture(\n gl,\n gl.LINEAR,\n getColorRamp(rampColors),\n 16,\n 16,\n );\n }\n }\n\n public isColorChanged(rampColors: { [key: number]: string }): boolean {\n const keys = Object.keys(rampColors);\n for (const item of keys) {\n const key = Number(item);\n // exist new key -> color need update\n if (!this.rampColors[key]) {\n return true;\n }\n // value changed -> color need update\n if (this.rampColors[key] && this.rampColors[key] !== rampColors[key]) {\n return true;\n }\n }\n return false;\n }\n\n public reSize(width: number, height: number) {\n if (width !== this.width || height !== this.height) {\n const gl = this.gl;\n gl.deleteTexture(this.backgroundTexture);\n gl.deleteTexture(this.screenTexture);\n\n this.width = width;\n this.height = height;\n const emptyPixels = new Uint8Array(width * height * 4);\n // screen textures to hold the drawn screen for the previous and the current frame\n this.backgroundTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n this.screenTexture = glUtils.createTexture(\n gl,\n gl.NEAREST,\n emptyPixels,\n width,\n height,\n );\n }\n }\n\n public draw() {\n if (this.windData?.image) {\n const gl = this.gl;\n\n glUtils.bindTexture(gl, this.windTexture as WebGLTexture, 0);\n glUtils.bindTexture(gl, this.particleStateTexture0 as WebGLTexture, 1);\n\n this.drawScreen(); // draw Particles into framebuffer\n this.updateParticles();\n\n return { d: this.pixels, w: this.width, h: this.height };\n } else {\n return { d: new Uint8Array([0, 0, 0, 0]), w: 1, h: 1 };\n }\n }\n\n public drawScreen() {\n const gl = this.gl;\n\n // draw the screen into a temporary framebuffer to retain it as the background on the next frame\n bindFramebuffer(gl, this.framebuffer, this.screenTexture);\n\n gl.viewport(0, 0, this.width, this.height);\n\n this.drawFullTexture(this.backgroundTexture, this.fadeOpacity);\n this.drawParticles();\n\n gl.disable(gl.BLEND);\n\n this.pixels = new Uint8Array(4 * this.width * this.height);\n gl.readPixels(\n 0,\n 0,\n this.width,\n this.height,\n gl.RGBA,\n gl.UNSIGNED_BYTE,\n this.pixels,\n );\n\n bindFramebuffer(gl, null, null);\n gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n\n // save the current screen as the background for the next frame\n const temp = this.backgroundTexture;\n this.backgroundTexture = this.screenTexture;\n this.screenTexture = temp;\n }\n\n public drawFullTexture(texture: any, opacity: number) {\n const gl = this.gl;\n const program = this.fullScreenProgram as any;\n gl.useProgram(program);\n\n // bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, this.quadBuffer);\n gl.vertexAttribPointer(program.a_pos, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(program.a_pos);\n\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n\n glUtils.bindTexture(gl, texture, 2);\n gl.uniform1i(program.u_screen, 2);\n gl.uniform1f(program.u_opacity, opacity);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n // gl.drawArrays(gl.POINTS, 0, 6);\n }\n\n public drawParticles() {\n const gl = this.gl;\n const program = this.drawProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.particleIndexBuffer, program.a_index, 1);\n glUtils.bindTexture(gl, this.colorRampTexture as WebGLTexture, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n gl.uniform1i(program.u_color_ramp, 2);\n\n gl.uniform1f(program.u_particles_res, this.particleStateResolution);\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n\n gl.drawArrays(gl.POINTS, 0, this.numParticlesSize);\n }\n\n public updateParticles() {\n const gl = this.gl;\n bindFramebuffer(gl, this.framebuffer, this.particleStateTexture1);\n gl.viewport(\n 0,\n 0,\n this.particleStateResolution,\n this.particleStateResolution,\n );\n\n const program = this.updateProgram as any;\n gl.useProgram(program);\n\n bindAttribute(gl, this.quadBuffer, program.a_pos, 2);\n\n gl.uniform1i(program.u_wind, 0);\n gl.uniform1i(program.u_particles, 1);\n\n gl.uniform1f(program.u_rand_seed, Math.random());\n gl.uniform2f(\n program.u_wind_res,\n this.windData.image.width * 2,\n this.windData.image.height * 2,\n );\n gl.uniform2f(program.u_wind_min, this.windData.uMin, this.windData.vMin);\n gl.uniform2f(program.u_wind_max, this.windData.uMax, this.windData.vMax);\n gl.uniform1f(program.u_speed_factor, this.speedFactor);\n gl.uniform1f(program.u_drop_rate, this.dropRate);\n gl.uniform1f(program.u_drop_rate_bump, this.dropRateBump);\n\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n\n // swap the particle state textures so the new one becomes the current one\n const temp = this.particleStateTexture0;\n this.particleStateTexture0 = this.particleStateTexture1;\n this.particleStateTexture1 = temp;\n\n bindFramebuffer(gl, null, null);\n\n // gl.viewport(0, 0, this.gl.canvas.width, this.gl.canvas.height);\n }\n\n public destroy() {\n // private drawProgram: WebGLProgram;\n // private fullScreenProgram: WebGLProgram;\n // private updateProgram: WebGLProgram;\n\n // private quadBuffer: WebGLBuffer | null;\n // private particleIndexBuffer: WebGLBuffer | null;\n\n // private framebuffer: WebGLFramebuffer | null;\n\n // private colorRampTexture: WebGLTexture | null;\n // private backgroundTexture: WebGLTexture | null;\n // private screenTexture: WebGLTexture | null;\n // private particleStateTexture0: WebGLTexture | null;\n // private particleStateTexture1: WebGLTexture | null;\n // private windTexture: WebGLTexture | null;\n\n this.gl.deleteBuffer(this.quadBuffer);\n this.gl.deleteBuffer(this.particleIndexBuffer);\n\n this.gl.deleteFramebuffer(this.framebuffer);\n\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.drawProgram.fragmentShader);\n this.gl.deleteProgram(this.drawProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.fullScreenProgram.fragmentShader);\n this.gl.deleteProgram(this.fullScreenProgram);\n\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.vertexShader);\n // @ts-ignore\n this.gl.deleteShader(this.updateProgram.fragmentShader);\n this.gl.deleteProgram(this.updateProgram);\n\n this.gl.deleteTexture(this.colorRampTexture);\n this.gl.deleteTexture(this.backgroundTexture);\n this.gl.deleteTexture(this.screenTexture);\n this.gl.deleteTexture(this.particleStateTexture0);\n this.gl.deleteTexture(this.particleStateTexture1);\n this.gl.deleteTexture(this.windTexture);\n }\n}\n"],"file":"windRender.js"}
@@ -79,7 +79,8 @@ var GeometryLayer = function (_BaseLayer) {
79
79
  var type = this.getModelType();
80
80
  var defaultConfig = {
81
81
  plane: {},
82
- sprite: {}
82
+ sprite: {},
83
+ billboard: {}
83
84
  };
84
85
  return defaultConfig[type];
85
86
  }
@@ -95,6 +96,8 @@ var GeometryLayer = function (_BaseLayer) {
95
96
  return 'plane';
96
97
  } else if (shape === 'sprite') {
97
98
  return 'sprite';
99
+ } else if (shape === 'billboard') {
100
+ return 'billboard';
98
101
  } else {
99
102
  return 'plane';
100
103
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Geometry/index.ts"],"names":["GeometryLayer","modelType","getModelType","layerModel","GeometryModels","models","initModels","buildModels","properties","opacity","type","minimum","maximum","defaultConfig","plane","sprite","shapeAttribute","styleAttributeService","getLayerStyleAttribute","shape","scale","field","BaseLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,a;;;;;;;;;;;;;;;uFAGG,e;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIC,gBAAeH,SAAf,CAAJ,CAA8B,IAA9B,CAAlB;AACA,WAAKI,MAAL,GAAc,KAAKF,UAAL,CAAgBG,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKF,UAAL,CAAgBI,WAAhB,EAAd;AACD;;;WAED,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKR,YAAL,EAAb;AACA,UAAMW,aAAa,GAAG;AACpBC,QAAAA,KAAK,EAAE,EADa;AAEpBC,QAAAA,MAAM,EAAE;AAFY,OAAtB;AAIA,aAAOF,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAA4C;AAAA;;AAC1C,UAAMM,cAAc,GAAG,KAAKC,qBAAL,CAA2BC,sBAA3B,CACrB,OADqB,CAAvB;AAGA,UAAMC,KAAK,GAAGH,cAAH,aAAGA,cAAH,gDAAGA,cAAc,CAAEI,KAAnB,0DAAG,sBAAuBC,KAArC;;AACA,UAAIF,KAAK,KAAK,OAAd,EAAuB;AACrB,eAAO,OAAP;AACD,OAFD,MAEO,IAAIA,KAAK,KAAK,QAAd,EAAwB;AAC7B,eAAO,QAAP;AACD,OAFM,MAEA;AACL,eAAO,OAAP;AACD;AACF;;;EA7CwCG,mB","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport { IGeometryLayerStyleOptions } from '../core/interface';\nimport GeometryModels, { GeometryModelType } from './models';\n\nexport default class GeometryLayer extends BaseLayer<\n IGeometryLayerStyleOptions\n> {\n public type: string = 'GeometryLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new GeometryModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n plane: {},\n sprite: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): GeometryModelType {\n const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute(\n 'shape',\n );\n const shape = shapeAttribute?.scale?.field as GeometryModelType;\n if (shape === 'plane') {\n return 'plane';\n } else if (shape === 'sprite') {\n return 'sprite';\n } else {\n return 'plane';\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/Geometry/index.ts"],"names":["GeometryLayer","modelType","getModelType","layerModel","GeometryModels","models","initModels","buildModels","properties","opacity","type","minimum","maximum","defaultConfig","plane","sprite","billboard","shapeAttribute","styleAttributeService","getLayerStyleAttribute","shape","scale","field","BaseLayer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,a;;;;;;;;;;;;;;;uFAGG,e;;;;;;WACtB,uBAAqB;AACnB,UAAMC,SAAS,GAAG,KAAKC,YAAL,EAAlB;AACA,WAAKC,UAAL,GAAkB,IAAIC,gBAAeH,SAAf,CAAJ,CAA8B,IAA9B,CAAlB;AACA,WAAKI,MAAL,GAAc,KAAKF,UAAL,CAAgBG,UAAhB,EAAd;AACD;;;WACD,yBAAuB;AACrB,WAAKD,MAAL,GAAc,KAAKF,UAAL,CAAgBI,WAAhB,EAAd;AACD;;;WAED,2BAA4B;AAC1B,aAAO;AACLC,QAAAA,UAAU,EAAE;AACVC,UAAAA,OAAO,EAAE;AACPC,YAAAA,IAAI,EAAE,QADC;AAEPC,YAAAA,OAAO,EAAE,CAFF;AAGPC,YAAAA,OAAO,EAAE;AAHF;AADC;AADP,OAAP;AASD;;;WACD,4BAA6B;AAC3B,UAAMF,IAAI,GAAG,KAAKR,YAAL,EAAb;AACA,UAAMW,aAAa,GAAG;AACpBC,QAAAA,KAAK,EAAE,EADa;AAEpBC,QAAAA,MAAM,EAAE,EAFY;AAGpBC,QAAAA,SAAS,EAAE;AAHS,OAAtB;AAKA,aAAOH,aAAa,CAACH,IAAD,CAApB;AACD;;;WAED,wBAA4C;AAAA;;AAC1C,UAAMO,cAAc,GAAG,KAAKC,qBAAL,CAA2BC,sBAA3B,CACrB,OADqB,CAAvB;AAGA,UAAMC,KAAK,GAAGH,cAAH,aAAGA,cAAH,gDAAGA,cAAc,CAAEI,KAAnB,0DAAG,sBAAuBC,KAArC;;AACA,UAAIF,KAAK,KAAK,OAAd,EAAuB;AACrB,eAAO,OAAP;AACD,OAFD,MAEO,IAAIA,KAAK,KAAK,QAAd,EAAwB;AAC7B,eAAO,QAAP;AACD,OAFM,MAEA,IAAIA,KAAK,KAAK,WAAd,EAA2B;AAChC,eAAO,WAAP;AACD,OAFM,MAEA;AACL,eAAO,OAAP;AACD;AACF;;;EAhDwCG,mB","sourcesContent":["import BaseLayer from '../core/BaseLayer';\nimport { IGeometryLayerStyleOptions } from '../core/interface';\nimport GeometryModels, { GeometryModelType } from './models';\n\nexport default class GeometryLayer extends BaseLayer<\n IGeometryLayerStyleOptions\n> {\n public type: string = 'GeometryLayer';\n public buildModels() {\n const modelType = this.getModelType();\n this.layerModel = new GeometryModels[modelType](this);\n this.models = this.layerModel.initModels();\n }\n public rebuildModels() {\n this.models = this.layerModel.buildModels();\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n protected getDefaultConfig() {\n const type = this.getModelType();\n const defaultConfig = {\n plane: {},\n sprite: {},\n billboard: {},\n };\n return defaultConfig[type];\n }\n\n protected getModelType(): GeometryModelType {\n const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute(\n 'shape',\n );\n const shape = shapeAttribute?.scale?.field as GeometryModelType;\n if (shape === 'plane') {\n return 'plane';\n } else if (shape === 'sprite') {\n return 'sprite';\n } else if (shape === 'billboard') {\n return 'billboard';\n } else {\n return 'plane';\n }\n }\n}\n"],"file":"index.js"}
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
24
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
+
26
+ var _l7Core = require("@antv/l7-core");
27
+
28
+ var _l7Utils = require("@antv/l7-utils");
29
+
30
+ var _BaseModel2 = _interopRequireDefault(require("../../core/BaseModel"));
31
+
32
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
33
+
34
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
35
+
36
+ var planeFrag = "\nuniform sampler2D u_texture;\nuniform float u_opacity;\n\nvarying vec3 v_Color;\nvarying vec2 v_uv;\n\n#pragma include \"picking\"\nvoid main() {\n gl_FragColor = texture2D(u_texture, vec2(v_uv.x, 1.0 - v_uv.y));\n gl_FragColor.a *= u_opacity;\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
37
+ var planeVert = "precision highp float;\nuniform mat4 u_ModelMatrix;\nuniform float u_raisingHeight: 0.0;\nuniform mat4 u_Mvp;\nuniform float u_opacity;\nuniform vec2 u_size: [1.0, 1.0];\nuniform mat2 u_RotateMatrix;\n\nattribute vec3 a_Extrude;\nattribute vec3 a_Position;\nattribute vec2 a_Uv;\nattribute vec3 a_Color;\n\nvarying vec3 v_Color;\nvarying vec2 v_uv;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\nvoid main() {\n vec3 extrude = a_Extrude;\n v_Color = a_Color;\n v_uv = a_Uv;\n\n float raiseHeight = u_raisingHeight;\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n float mapboxZoomScale = 4.0/pow(2.0, 21.0 - u_Zoom);\n raiseHeight = u_raisingHeight * mapboxZoomScale;\n }\n\n // \u8BA1\u7B97\u7ECF\u7EAC\u5EA6\u70B9\u4F4D\u5750\u6807\n vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n\n // \u8BA1\u7B97\u7ED5 z \u8F74\u65CB\u8F6C\u540E\u7684\u504F\u79FB\n vec2 offsetXY = project_pixel(u_RotateMatrix * vec2(extrude.x * u_size.x, 0.0));\n // \u7ED5 z \u8F74\u65CB\u8F6C\n float x = project_pos.x + offsetXY.x;\n float y = project_pos.y + offsetXY.y;\n // z \u8F74\u4E0D\u53C2\u4E0E\u65CB\u8F6C\n float z = project_pixel(extrude.y * u_size.y + raiseHeight);\n\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n // gl_Position = u_Mvp * (vec4(project_pos.xy, a_Position.z, 1.0));\n gl_Position = u_Mvp * (vec4(x, y, z, 1.0));\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(x , y, z , 1.0));\n }\n\n setPickingColor(a_PickingColor);\n}\n";
38
+
39
+ var BillBoardModel = function (_BaseModel) {
40
+ (0, _inherits2.default)(BillBoardModel, _BaseModel);
41
+
42
+ var _super = _createSuper(BillBoardModel);
43
+
44
+ function BillBoardModel() {
45
+ var _this;
46
+
47
+ (0, _classCallCheck2.default)(this, BillBoardModel);
48
+
49
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
50
+ args[_key] = arguments[_key];
51
+ }
52
+
53
+ _this = _super.call.apply(_super, [this].concat(args));
54
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "texture", void 0);
55
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "radian", 0);
56
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "planeGeometryTriangulation", function () {
57
+ var _ref = _this.layer.getLayerConfig(),
58
+ _ref$center = _ref.center,
59
+ center = _ref$center === void 0 ? [120, 30] : _ref$center;
60
+
61
+ return {
62
+ size: 4,
63
+ indices: [0, 1, 2, 2, 3, 0],
64
+ vertices: [].concat((0, _toConsumableArray2.default)(center), [1, 1], (0, _toConsumableArray2.default)(center), [0, 1], (0, _toConsumableArray2.default)(center), [0, 0], (0, _toConsumableArray2.default)(center), [1, 0])
65
+ };
66
+ });
67
+ return _this;
68
+ }
69
+
70
+ (0, _createClass2.default)(BillBoardModel, [{
71
+ key: "getUninforms",
72
+ value: function getUninforms() {
73
+ var _ref2 = this.layer.getLayerConfig(),
74
+ opacity = _ref2.opacity,
75
+ _ref2$width = _ref2.width,
76
+ width = _ref2$width === void 0 ? 1 : _ref2$width,
77
+ _ref2$height = _ref2.height,
78
+ height = _ref2$height === void 0 ? 1 : _ref2$height,
79
+ _ref2$raisingHeight = _ref2.raisingHeight,
80
+ raisingHeight = _ref2$raisingHeight === void 0 ? 0 : _ref2$raisingHeight;
81
+
82
+ var rotateFlag = 1;
83
+
84
+ if (this.mapService.version === 'GAODE2.x' || this.mapService.version === 'GAODE1.x') {
85
+ rotateFlag = -1;
86
+ }
87
+
88
+ this.radian = rotateFlag * Math.PI * (this.mapService.getRotation() % 360) / 180;
89
+ return {
90
+ u_raisingHeight: Number(raisingHeight),
91
+ u_RotateMatrix: new Float32Array([Math.cos(this.radian), Math.sin(this.radian), -Math.sin(this.radian), Math.cos(this.radian)]),
92
+ u_opacity: opacity || 1,
93
+ u_texture: this.texture,
94
+ u_size: [width, height]
95
+ };
96
+ }
97
+ }, {
98
+ key: "clearModels",
99
+ value: function clearModels() {
100
+ var _this$texture;
101
+
102
+ (_this$texture = this.texture) === null || _this$texture === void 0 ? void 0 : _this$texture.destroy();
103
+ }
104
+ }, {
105
+ key: "initModels",
106
+ value: function initModels() {
107
+ var _ref3 = this.layer.getLayerConfig(),
108
+ _ref3$mask = _ref3.mask,
109
+ mask = _ref3$mask === void 0 ? false : _ref3$mask,
110
+ _ref3$maskInside = _ref3.maskInside,
111
+ maskInside = _ref3$maskInside === void 0 ? true : _ref3$maskInside,
112
+ drawCanvas = _ref3.drawCanvas;
113
+
114
+ var createTexture2D = this.rendererService.createTexture2D;
115
+ this.texture = createTexture2D({
116
+ height: 0,
117
+ width: 0
118
+ });
119
+
120
+ if (drawCanvas) {
121
+ this.updateTexture(drawCanvas);
122
+ }
123
+
124
+ return [this.layer.buildLayerModel({
125
+ moduleName: 'geometry_billboard',
126
+ vertexShader: planeVert,
127
+ fragmentShader: planeFrag,
128
+ triangulation: this.planeGeometryTriangulation,
129
+ primitive: _l7Core.gl.TRIANGLES,
130
+ depth: {
131
+ enable: true
132
+ },
133
+ blend: this.getBlend(),
134
+ stencil: (0, _l7Utils.getMask)(mask, maskInside)
135
+ })];
136
+ }
137
+ }, {
138
+ key: "buildModels",
139
+ value: function buildModels() {
140
+ return this.initModels();
141
+ }
142
+ }, {
143
+ key: "updateTexture",
144
+ value: function updateTexture(drawCanvas) {
145
+ var createTexture2D = this.rendererService.createTexture2D;
146
+
147
+ var _ref4 = this.layer.getLayerConfig(),
148
+ _ref4$canvasWidth = _ref4.canvasWidth,
149
+ canvasWidth = _ref4$canvasWidth === void 0 ? 1 : _ref4$canvasWidth,
150
+ _ref4$canvasHeight = _ref4.canvasHeight,
151
+ canvasHeight = _ref4$canvasHeight === void 0 ? 1 : _ref4$canvasHeight;
152
+
153
+ var canvas = document.createElement('canvas');
154
+ canvas.width = canvasWidth;
155
+ canvas.height = canvasHeight;
156
+ var ctx = canvas.getContext('2d');
157
+
158
+ if (ctx) {
159
+ drawCanvas(canvas);
160
+ this.texture = createTexture2D({
161
+ data: canvas,
162
+ width: canvas.width,
163
+ height: canvas.height,
164
+ wrapS: _l7Core.gl.CLAMP_TO_EDGE,
165
+ wrapT: _l7Core.gl.CLAMP_TO_EDGE
166
+ });
167
+ this.layerService.updateLayerRenderList();
168
+ this.layerService.renderLayers();
169
+ }
170
+ }
171
+ }, {
172
+ key: "getConfigSchema",
173
+ value: function getConfigSchema() {
174
+ return {
175
+ properties: {
176
+ opacity: {
177
+ type: 'number',
178
+ minimum: 0,
179
+ maximum: 1
180
+ }
181
+ }
182
+ };
183
+ }
184
+ }, {
185
+ key: "registerBuiltinAttributes",
186
+ value: function registerBuiltinAttributes() {
187
+ this.styleAttributeService.registerStyleAttribute({
188
+ name: 'extrude',
189
+ type: _l7Core.AttributeType.Attribute,
190
+ descriptor: {
191
+ name: 'a_Extrude',
192
+ buffer: {
193
+ usage: _l7Core.gl.DYNAMIC_DRAW,
194
+ data: [],
195
+ type: _l7Core.gl.FLOAT
196
+ },
197
+ size: 3,
198
+ update: function update(feature, featureIdx, vertex, attributeIdx) {
199
+ var extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];
200
+ var extrudeIndex = attributeIdx % 4 * 3;
201
+ return [extrude[extrudeIndex], extrude[extrudeIndex + 1], extrude[extrudeIndex + 2]];
202
+ }
203
+ }
204
+ });
205
+ this.styleAttributeService.registerStyleAttribute({
206
+ name: 'uv',
207
+ type: _l7Core.AttributeType.Attribute,
208
+ descriptor: {
209
+ name: 'a_Uv',
210
+ buffer: {
211
+ usage: _l7Core.gl.DYNAMIC_DRAW,
212
+ data: [],
213
+ type: _l7Core.gl.FLOAT
214
+ },
215
+ size: 2,
216
+ update: function update(feature, featureIdx, vertex, attributeIdx) {
217
+ return [vertex[2], vertex[3]];
218
+ }
219
+ }
220
+ });
221
+ }
222
+ }]);
223
+ return BillBoardModel;
224
+ }(_BaseModel2.default);
225
+
226
+ exports.default = BillBoardModel;
227
+ //# sourceMappingURL=billboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/Geometry/models/billboard.ts"],"names":["BillBoardModel","layer","getLayerConfig","center","size","indices","vertices","opacity","width","height","raisingHeight","rotateFlag","mapService","version","radian","Math","PI","getRotation","u_raisingHeight","Number","u_RotateMatrix","Float32Array","cos","sin","u_opacity","u_texture","texture","u_size","destroy","mask","maskInside","drawCanvas","createTexture2D","rendererService","updateTexture","buildLayerModel","moduleName","vertexShader","planeVert","fragmentShader","planeFrag","triangulation","planeGeometryTriangulation","primitive","gl","TRIANGLES","depth","enable","blend","getBlend","stencil","initModels","canvasWidth","canvasHeight","canvas","document","createElement","ctx","getContext","data","wrapS","CLAMP_TO_EDGE","wrapT","layerService","updateLayerRenderList","renderLayers","properties","type","minimum","maximum","styleAttributeService","registerStyleAttribute","name","AttributeType","Attribute","descriptor","buffer","usage","DYNAMIC_DRAW","FLOAT","update","feature","featureIdx","vertex","attributeIdx","extrude","extrudeIndex","BaseModel"],"mappings":"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","sourcesContent":["import {\n AttributeType,\n gl,\n IAttrubuteAndElements,\n IEncodeFeature,\n IModelUniform,\n ITexture2D,\n} from '@antv/l7-core';\nimport { getMask, isMini } from '@antv/l7-utils';\nimport BaseModel from '../../core/BaseModel';\nimport { IGeometryLayerStyleOptions } from '../../core/interface';\nimport planeFrag from '../shaders/billboard_frag.glsl';\nimport planeVert from '../shaders/billboard_vert.glsl';\n\nexport default class BillBoardModel extends BaseModel {\n protected texture: ITexture2D;\n private radian: number = 0; // 旋转的弧度\n\n public planeGeometryTriangulation = () => {\n const {\n center = [120, 30],\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n return {\n size: 4,\n indices: [0, 1, 2, 2, 3, 0],\n vertices: [\n ...center,\n ...[1, 1],\n ...center,\n ...[0, 1],\n ...center,\n ...[0, 0],\n ...center,\n ...[1, 0],\n ],\n };\n };\n\n public getUninforms(): IModelUniform {\n const {\n opacity,\n width = 1,\n height = 1,\n raisingHeight = 0,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n\n /**\n * rotateFlag\n * L7MAP 1\n * MAPBOX 1\n * GAODE2.x -1\n * GAODE1.x -1\n */\n let rotateFlag = 1;\n if (\n this.mapService.version === 'GAODE2.x' ||\n this.mapService.version === 'GAODE1.x'\n ) {\n rotateFlag = -1;\n }\n // 控制图标的旋转角度(绕 Z 轴旋转)\n this.radian =\n (rotateFlag * Math.PI * (this.mapService.getRotation() % 360)) / 180;\n\n return {\n u_raisingHeight: Number(raisingHeight),\n u_RotateMatrix: new Float32Array([\n // z\n Math.cos(this.radian),\n Math.sin(this.radian),\n -Math.sin(this.radian),\n Math.cos(this.radian),\n ]),\n u_opacity: opacity || 1,\n u_texture: this.texture,\n u_size: [width, height],\n };\n }\n\n public clearModels(): void {\n this.texture?.destroy();\n }\n\n public initModels() {\n const {\n mask = false,\n maskInside = true,\n drawCanvas,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n\n const { createTexture2D } = this.rendererService;\n this.texture = createTexture2D({\n height: 0,\n width: 0,\n });\n\n if (drawCanvas) {\n this.updateTexture(drawCanvas);\n }\n\n return [\n this.layer.buildLayerModel({\n moduleName: 'geometry_billboard',\n vertexShader: planeVert,\n fragmentShader: planeFrag,\n triangulation: this.planeGeometryTriangulation,\n primitive: gl.TRIANGLES,\n depth: { enable: true },\n blend: this.getBlend(),\n stencil: getMask(mask, maskInside),\n }),\n ];\n }\n\n public buildModels() {\n return this.initModels();\n }\n\n public updateTexture(drawCanvas: (canvas: HTMLCanvasElement) => void): void {\n const { createTexture2D } = this.rendererService;\n\n const {\n canvasWidth = 1,\n canvasHeight = 1,\n } = this.layer.getLayerConfig() as IGeometryLayerStyleOptions;\n const canvas = document.createElement('canvas');\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n const ctx = canvas.getContext('2d');\n if (ctx) {\n drawCanvas(canvas);\n this.texture = createTexture2D({\n data: canvas,\n width: canvas.width,\n height: canvas.height,\n wrapS: gl.CLAMP_TO_EDGE,\n wrapT: gl.CLAMP_TO_EDGE,\n });\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n\n protected getConfigSchema() {\n return {\n properties: {\n opacity: {\n type: 'number',\n minimum: 0,\n maximum: 1,\n },\n },\n };\n }\n\n protected registerBuiltinAttributes() {\n this.styleAttributeService.registerStyleAttribute({\n name: 'extrude',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Extrude',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 3,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n const extrude = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0];\n const extrudeIndex = (attributeIdx % 4) * 3;\n return [\n extrude[extrudeIndex],\n extrude[extrudeIndex + 1],\n extrude[extrudeIndex + 2],\n ];\n },\n },\n });\n // point layer size;\n this.styleAttributeService.registerStyleAttribute({\n name: 'uv',\n type: AttributeType.Attribute,\n descriptor: {\n name: 'a_Uv',\n buffer: {\n // give the WebGL driver a hint that this buffer may change\n usage: gl.DYNAMIC_DRAW,\n data: [],\n type: gl.FLOAT,\n },\n size: 2,\n update: (\n feature: IEncodeFeature,\n featureIdx: number,\n vertex: number[],\n attributeIdx: number,\n ) => {\n return [vertex[2], vertex[3]];\n },\n },\n });\n }\n}\n"],"file":"billboard.js"}
@@ -7,13 +7,16 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.default = void 0;
9
9
 
10
+ var _billboard = _interopRequireDefault(require("./billboard"));
11
+
10
12
  var _plane = _interopRequireDefault(require("./plane"));
11
13
 
12
14
  var _sprite = _interopRequireDefault(require("./sprite"));
13
15
 
14
16
  var GeometryModels = {
15
17
  plane: _plane.default,
16
- sprite: _sprite.default
18
+ sprite: _sprite.default,
19
+ billboard: _billboard.default
17
20
  };
18
21
  var _default = GeometryModels;
19
22
  exports.default = _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/Geometry/models/index.ts"],"names":["GeometryModels","plane","PlaneModel","sprite","SpriteModel"],"mappings":";;;;;;;;;AAAA;;AACA;;AAGA,IAAMA,cAAmD,GAAG;AAC1DC,EAAAA,KAAK,EAAEC,cADmD;AAE1DC,EAAAA,MAAM,EAAEC;AAFkD,CAA5D;eAIeJ,c","sourcesContent":["import PlaneModel from './plane';\nimport SpriteModel from './sprite';\nexport type GeometryModelType = 'plane' | 'sprite';\n\nconst GeometryModels: { [key in GeometryModelType]: any } = {\n plane: PlaneModel,\n sprite: SpriteModel,\n};\nexport default GeometryModels;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/Geometry/models/index.ts"],"names":["GeometryModels","plane","PlaneModel","sprite","SpriteModel","billboard","BillBoardModel"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAGA,IAAMA,cAAmD,GAAG;AAC1DC,EAAAA,KAAK,EAAEC,cADmD;AAE1DC,EAAAA,MAAM,EAAEC,eAFkD;AAG1DC,EAAAA,SAAS,EAAEC;AAH+C,CAA5D;eAKeN,c","sourcesContent":["import BillBoardModel from './billboard';\nimport PlaneModel from './plane';\nimport SpriteModel from './sprite';\nexport type GeometryModelType = 'plane' | 'sprite' | 'billboard';\n\nconst GeometryModels: { [key in GeometryModelType]: any } = {\n plane: PlaneModel,\n sprite: SpriteModel,\n billboard: BillBoardModel,\n};\nexport default GeometryModels;\n"],"file":"index.js"}
@@ -35,8 +35,8 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
35
35
 
36
36
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
37
37
 
38
- var spriteFrag = "\nuniform sampler2D u_texture;\nuniform float u_mapFlag;\nuniform float u_opacity;\n\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"picking\"\nvoid main() {\n\n if(v_d < 0.0) {\n discard;\n }\n\n if(u_mapFlag > 0.0) {\n gl_FragColor = texture2D(u_texture, gl_PointCoord);\n gl_FragColor.a *= u_opacity;\n } else {\n gl_FragColor = vec4(v_Color, u_opacity);\n }\n\n gl_FragColor = filterColor(gl_FragColor);\n}\n";
39
- var spriteVert = "precision highp float;\n\nattribute vec3 a_Position;\nattribute vec3 a_Color;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_opacity;\nuniform float u_Scale;\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"projection\"\n#pragma include \"picking\"\nvoid main() {\n v_Color = a_Color;\n \n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n\n v_d = a_Position.z;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * (vec4(project_pos.xy, a_Position.z, 1.0));\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, a_Position.z, 1.0));\n }\n\n gl_PointSize = pow((u_Zoom - 1.0), 2.0) * u_Scale;\n\n setPickingColor(a_PickingColor);\n}\n";
38
+ var spriteFrag = "\nuniform sampler2D u_texture;\nuniform float u_mapFlag;\nuniform float u_opacity;\n\nvarying vec3 v_Color;\nvarying float v_d;\n\nvoid main() {\n\n if(v_d < 0.0) {\n discard;\n }\n\n if(u_mapFlag > 0.0) {\n gl_FragColor = texture2D(u_texture, gl_PointCoord);\n gl_FragColor.a *= u_opacity;\n } else {\n gl_FragColor = vec4(v_Color, u_opacity);\n }\n}\n";
39
+ var spriteVert = "precision highp float;\n\nattribute vec3 a_Position;\nattribute vec3 a_Color;\n\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_opacity;\nuniform float u_Scale;\nvarying vec3 v_Color;\nvarying float v_d;\n\n#pragma include \"projection\"\nvoid main() {\n v_Color = a_Color;\n \n vec4 project_pos = project_position(vec4(a_Position, 1.0));\n\n v_d = a_Position.z;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * (vec4(project_pos.xy, a_Position.z, 1.0));\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, a_Position.z, 1.0));\n }\n\n gl_PointSize = pow((u_Zoom - 1.0), 2.0) * u_Scale;\n}\n";
40
40
  var SPRITE_ANIMATE_DIR;
41
41
 
42
42
  (function (SPRITE_ANIMATE_DIR) {