@antv/l7-layers 2.21.8 → 2.21.9-beta.0
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.
- package/es/citybuliding/models/build.d.ts +16 -0
- package/es/citybuliding/models/build.js +18 -20
- package/es/citybuliding/shaders/build_frag.glsl +6 -6
- package/es/citybuliding/shaders/build_vert.glsl +8 -14
- package/es/core/BaseLayer.js +9 -8
- package/es/core/BaseModel.d.ts +15 -2
- package/es/core/BaseModel.js +94 -62
- package/es/core/CommonStyleAttribute.d.ts +14 -18
- package/es/core/CommonStyleAttribute.js +23 -67
- package/es/core/triangulation.js +13 -39
- package/es/earth/models/atmosphere.d.ts +15 -0
- package/es/earth/models/atmosphere.js +30 -24
- package/es/earth/models/base.d.ts +15 -0
- package/es/earth/models/base.js +30 -24
- package/es/earth/models/bloomsphere.d.ts +15 -0
- package/es/earth/models/bloomsphere.js +30 -24
- package/es/earth/shaders/atmosphere/atmosphere_vert.glsl +7 -5
- package/es/earth/shaders/base/base_vert.glsl +3 -3
- package/es/earth/shaders/bloomshpere/bloomsphere_vert.glsl +5 -4
- package/es/geometry/models/billboard.d.ts +15 -0
- package/es/geometry/models/billboard.js +14 -8
- package/es/geometry/models/plane.d.ts +14 -0
- package/es/geometry/models/plane.js +10 -10
- package/es/geometry/models/sprite.js +3 -9
- package/es/geometry/shaders/billboard_vert.glsl +28 -25
- package/es/geometry/shaders/plane_vert.glsl +6 -6
- package/es/geometry/shaders/sprite_vert.glsl +7 -9
- package/es/heatmap/models/grid.d.ts +14 -0
- package/es/heatmap/models/grid.js +10 -3
- package/es/heatmap/models/grid3d.d.ts +16 -0
- package/es/heatmap/models/grid3d.js +14 -6
- package/es/heatmap/models/heatmap.d.ts +20 -1
- package/es/heatmap/models/heatmap.js +96 -83
- package/es/heatmap/models/hexagon.d.ts +14 -0
- package/es/heatmap/models/hexagon.js +9 -3
- package/es/heatmap/shaders/grid/grid_vert.glsl +30 -42
- package/es/heatmap/shaders/grid3d/grid_3d_vert.glsl +14 -26
- package/es/heatmap/shaders/heatmap/heatmap_3d_vert.glsl +19 -16
- package/es/heatmap/shaders/heatmap/heatmap_framebuffer_vert.glsl +16 -22
- package/es/heatmap/shaders/heatmap/heatmap_vert.glsl +3 -4
- package/es/heatmap/shaders/hexagon/hexagon_vert.glsl +13 -23
- package/es/image/models/image.d.ts +14 -0
- package/es/image/models/image.js +11 -3
- package/es/image/shaders/image_vert.glsl +7 -6
- package/es/line/models/arc.d.ts +18 -0
- package/es/line/models/arc.js +57 -8
- package/es/line/models/arc_3d.d.ts +18 -0
- package/es/line/models/arc_3d.js +55 -7
- package/es/line/models/flow.d.ts +17 -0
- package/es/line/models/flow.js +35 -7
- package/es/line/models/great_circle.d.ts +17 -0
- package/es/line/models/great_circle.js +34 -6
- package/es/line/models/line.d.ts +17 -0
- package/es/line/models/line.js +17 -8
- package/es/line/models/simple_line.d.ts +14 -0
- package/es/line/models/simple_line.js +12 -47
- package/es/line/models/wall.d.ts +17 -0
- package/es/line/models/wall.js +22 -48
- package/es/line/shaders/arc/line_arc_vert.glsl +42 -48
- package/es/line/shaders/arc3d/line_arc_3d_vert.glsl +15 -20
- package/es/line/shaders/flow/flow_line_vert.glsl +30 -48
- package/es/line/shaders/greatCircle/line_arc_great_circle_vert.glsl +56 -72
- package/es/line/shaders/line/line_vert.glsl +31 -48
- package/es/line/shaders/simple/simpleline_vert.glsl +18 -23
- package/es/line/shaders/wall/wall_vert.glsl +36 -45
- package/es/mask/models/fill.js +2 -1
- package/es/mask/shaders/mask_vert.glsl +2 -7
- package/es/plugins/DataMappingPlugin.d.ts +0 -1
- package/es/plugins/DataMappingPlugin.js +1 -24
- package/es/plugins/PixelPickingPlugin.js +2 -2
- package/es/plugins/RegisterStyleAttributePlugin.d.ts +0 -1
- package/es/plugins/RegisterStyleAttributePlugin.js +3 -25
- package/es/plugins/ShaderUniformPlugin.d.ts +0 -5
- package/es/plugins/ShaderUniformPlugin.js +2 -34
- package/es/point/models/billboard_point.d.ts +14 -0
- package/es/point/models/billboard_point.js +11 -3
- package/es/point/models/earthExtrude.d.ts +16 -0
- package/es/point/models/earthExtrude.js +15 -8
- package/es/point/models/earthFill.d.ts +16 -0
- package/es/point/models/earthFill.js +13 -5
- package/es/point/models/extrude.d.ts +16 -0
- package/es/point/models/extrude.js +19 -12
- package/es/point/models/fill.d.ts +16 -0
- package/es/point/models/fill.js +16 -5
- package/es/point/models/fillImage.d.ts +16 -0
- package/es/point/models/fillImage.js +16 -16
- package/es/point/models/image.d.ts +15 -0
- package/es/point/models/image.js +14 -4
- package/es/point/models/normal.d.ts +14 -0
- package/es/point/models/normal.js +11 -3
- package/es/point/models/radar.d.ts +15 -0
- package/es/point/models/radar.js +13 -4
- package/es/point/models/text.d.ts +16 -0
- package/es/point/models/text.js +18 -11
- package/es/point/shaders/billboard/billboard_point_vert.glsl +10 -13
- package/es/point/shaders/earthExtrude/earthExtrude_vert.glsl +15 -25
- package/es/point/shaders/earthFill/earthFill_vert.glsl +6 -6
- package/es/point/shaders/extrude/extrude_vert.glsl +35 -39
- package/es/point/shaders/fill/fill_vert.glsl +12 -14
- package/es/point/shaders/fillImage/fillImage_vert.glsl +16 -28
- package/es/point/shaders/image/image_vert.glsl +15 -12
- package/es/point/shaders/normal/normal_vert.glsl +7 -10
- package/es/point/shaders/radar/radar_vert.glsl +11 -11
- package/es/point/shaders/text/text_vert.glsl +10 -9
- package/es/polygon/models/extrude.d.ts +16 -0
- package/es/polygon/models/extrude.js +26 -26
- package/es/polygon/models/extrusion.d.ts +16 -0
- package/es/polygon/models/extrusion.js +34 -4
- package/es/polygon/models/fill.d.ts +14 -0
- package/es/polygon/models/fill.js +12 -4
- package/es/polygon/models/ocean.d.ts +14 -0
- package/es/polygon/models/ocean.js +11 -6
- package/es/polygon/models/water.d.ts +14 -0
- package/es/polygon/models/water.js +11 -6
- package/es/polygon/shaders/extrude/polygon_extrude_picklight_vert.glsl +17 -15
- package/es/polygon/shaders/extrude/polygon_extrude_vert.glsl +22 -20
- package/es/polygon/shaders/extrude/polygon_extrudetex_vert.glsl +17 -17
- package/es/polygon/shaders/extrusion/polygon_extrusion_vert.glsl +8 -8
- package/es/polygon/shaders/fill/fill_linear_vert.glsl +7 -6
- package/es/polygon/shaders/fill/fill_vert.glsl +10 -12
- package/es/polygon/shaders/ocean/ocean_vert.glsl +3 -4
- package/es/polygon/shaders/water/polygon_water_vert.glsl +5 -5
- package/es/raster/index.d.ts +1 -1
- package/es/raster/index.js +1 -1
- package/es/raster/models/raster.d.ts +14 -0
- package/es/raster/models/raster.js +12 -3
- package/es/raster/models/rasterRgb.d.ts +14 -0
- package/es/raster/models/rasterRgb.js +12 -3
- package/es/raster/models/rasterTerrainRgb.d.ts +14 -0
- package/es/raster/models/rasterTerrainRgb.js +11 -3
- package/es/raster/shaders/raster/raster_2d_vert.glsl +6 -6
- package/es/raster/shaders/rgb/raster_rgb_vert.glsl +11 -11
- package/es/raster/shaders/terrain/terrain_rgb_vert.glsl +11 -11
- package/es/tile/core/BaseLayer.js +0 -16
- package/es/utils/extrude_polyline.d.ts +0 -15
- package/es/utils/extrude_polyline.js +0 -217
- package/es/wind/models/wind.d.ts +14 -0
- package/es/wind/models/wind.js +9 -1
- package/es/wind/shaders/wind_vert.glsl +6 -5
- package/lib/citybuliding/models/build.d.ts +16 -0
- package/lib/citybuliding/models/build.js +18 -20
- package/lib/citybuliding/shaders/build_frag.glsl +6 -6
- package/lib/citybuliding/shaders/build_vert.glsl +8 -14
- package/lib/core/BaseLayer.js +9 -8
- package/lib/core/BaseModel.d.ts +15 -2
- package/lib/core/BaseModel.js +92 -60
- package/lib/core/CommonStyleAttribute.d.ts +14 -18
- package/lib/core/CommonStyleAttribute.js +23 -68
- package/lib/core/triangulation.js +13 -39
- package/lib/earth/models/atmosphere.d.ts +15 -0
- package/lib/earth/models/atmosphere.js +30 -24
- package/lib/earth/models/base.d.ts +15 -0
- package/lib/earth/models/base.js +30 -24
- package/lib/earth/models/bloomsphere.d.ts +15 -0
- package/lib/earth/models/bloomsphere.js +30 -24
- package/lib/earth/shaders/atmosphere/atmosphere_vert.glsl +7 -5
- package/lib/earth/shaders/base/base_vert.glsl +3 -3
- package/lib/earth/shaders/bloomshpere/bloomsphere_vert.glsl +5 -4
- package/lib/geometry/models/billboard.d.ts +15 -0
- package/lib/geometry/models/billboard.js +14 -8
- package/lib/geometry/models/plane.d.ts +14 -0
- package/lib/geometry/models/plane.js +10 -10
- package/lib/geometry/models/sprite.js +3 -9
- package/lib/geometry/shaders/billboard_vert.glsl +28 -25
- package/lib/geometry/shaders/plane_vert.glsl +6 -6
- package/lib/geometry/shaders/sprite_vert.glsl +7 -9
- package/lib/heatmap/models/grid.d.ts +14 -0
- package/lib/heatmap/models/grid.js +10 -3
- package/lib/heatmap/models/grid3d.d.ts +16 -0
- package/lib/heatmap/models/grid3d.js +14 -6
- package/lib/heatmap/models/heatmap.d.ts +20 -1
- package/lib/heatmap/models/heatmap.js +95 -82
- package/lib/heatmap/models/hexagon.d.ts +14 -0
- package/lib/heatmap/models/hexagon.js +9 -3
- package/lib/heatmap/shaders/grid/grid_vert.glsl +30 -42
- package/lib/heatmap/shaders/grid3d/grid_3d_vert.glsl +14 -26
- package/lib/heatmap/shaders/heatmap/heatmap_3d_vert.glsl +19 -16
- package/lib/heatmap/shaders/heatmap/heatmap_framebuffer_vert.glsl +16 -22
- package/lib/heatmap/shaders/heatmap/heatmap_vert.glsl +3 -4
- package/lib/heatmap/shaders/hexagon/hexagon_vert.glsl +13 -23
- package/lib/image/models/image.d.ts +14 -0
- package/lib/image/models/image.js +11 -3
- package/lib/image/shaders/image_vert.glsl +7 -6
- package/lib/line/models/arc.d.ts +18 -0
- package/lib/line/models/arc.js +56 -7
- package/lib/line/models/arc_3d.d.ts +18 -0
- package/lib/line/models/arc_3d.js +55 -7
- package/lib/line/models/flow.d.ts +17 -0
- package/lib/line/models/flow.js +35 -7
- package/lib/line/models/great_circle.d.ts +17 -0
- package/lib/line/models/great_circle.js +33 -5
- package/lib/line/models/line.d.ts +17 -0
- package/lib/line/models/line.js +17 -8
- package/lib/line/models/simple_line.d.ts +14 -0
- package/lib/line/models/simple_line.js +12 -47
- package/lib/line/models/wall.d.ts +17 -0
- package/lib/line/models/wall.js +22 -48
- package/lib/line/shaders/arc/line_arc_vert.glsl +42 -48
- package/lib/line/shaders/arc3d/line_arc_3d_vert.glsl +15 -20
- package/lib/line/shaders/flow/flow_line_vert.glsl +30 -48
- package/lib/line/shaders/greatCircle/line_arc_great_circle_vert.glsl +56 -72
- package/lib/line/shaders/line/line_vert.glsl +31 -48
- package/lib/line/shaders/simple/simpleline_vert.glsl +18 -23
- package/lib/line/shaders/wall/wall_vert.glsl +36 -45
- package/lib/mask/models/fill.js +2 -1
- package/lib/mask/shaders/mask_vert.glsl +2 -7
- package/lib/plugins/DataMappingPlugin.d.ts +0 -1
- package/lib/plugins/DataMappingPlugin.js +0 -23
- package/lib/plugins/PixelPickingPlugin.js +1 -1
- package/lib/plugins/RegisterStyleAttributePlugin.d.ts +0 -1
- package/lib/plugins/RegisterStyleAttributePlugin.js +2 -24
- package/lib/plugins/ShaderUniformPlugin.d.ts +0 -5
- package/lib/plugins/ShaderUniformPlugin.js +2 -34
- package/lib/point/models/billboard_point.d.ts +14 -0
- package/lib/point/models/billboard_point.js +11 -3
- package/lib/point/models/earthExtrude.d.ts +16 -0
- package/lib/point/models/earthExtrude.js +14 -7
- package/lib/point/models/earthFill.d.ts +16 -0
- package/lib/point/models/earthFill.js +13 -5
- package/lib/point/models/extrude.d.ts +16 -0
- package/lib/point/models/extrude.js +18 -11
- package/lib/point/models/fill.d.ts +16 -0
- package/lib/point/models/fill.js +16 -5
- package/lib/point/models/fillImage.d.ts +16 -0
- package/lib/point/models/fillImage.js +16 -16
- package/lib/point/models/image.d.ts +15 -0
- package/lib/point/models/image.js +14 -4
- package/lib/point/models/normal.d.ts +14 -0
- package/lib/point/models/normal.js +11 -3
- package/lib/point/models/radar.d.ts +15 -0
- package/lib/point/models/radar.js +13 -4
- package/lib/point/models/text.d.ts +16 -0
- package/lib/point/models/text.js +18 -11
- package/lib/point/shaders/billboard/billboard_point_vert.glsl +10 -13
- package/lib/point/shaders/earthExtrude/earthExtrude_vert.glsl +15 -25
- package/lib/point/shaders/earthFill/earthFill_vert.glsl +6 -6
- package/lib/point/shaders/extrude/extrude_vert.glsl +35 -39
- package/lib/point/shaders/fill/fill_vert.glsl +12 -14
- package/lib/point/shaders/fillImage/fillImage_vert.glsl +16 -28
- package/lib/point/shaders/image/image_vert.glsl +15 -12
- package/lib/point/shaders/normal/normal_vert.glsl +7 -10
- package/lib/point/shaders/radar/radar_vert.glsl +11 -11
- package/lib/point/shaders/text/text_vert.glsl +10 -9
- package/lib/polygon/models/extrude.d.ts +16 -0
- package/lib/polygon/models/extrude.js +25 -25
- package/lib/polygon/models/extrusion.d.ts +16 -0
- package/lib/polygon/models/extrusion.js +34 -4
- package/lib/polygon/models/fill.d.ts +14 -0
- package/lib/polygon/models/fill.js +12 -4
- package/lib/polygon/models/ocean.d.ts +14 -0
- package/lib/polygon/models/ocean.js +11 -6
- package/lib/polygon/models/water.d.ts +14 -0
- package/lib/polygon/models/water.js +11 -6
- package/lib/polygon/shaders/extrude/polygon_extrude_picklight_vert.glsl +17 -15
- package/lib/polygon/shaders/extrude/polygon_extrude_vert.glsl +22 -20
- package/lib/polygon/shaders/extrude/polygon_extrudetex_vert.glsl +17 -17
- package/lib/polygon/shaders/extrusion/polygon_extrusion_vert.glsl +8 -8
- package/lib/polygon/shaders/fill/fill_linear_vert.glsl +7 -6
- package/lib/polygon/shaders/fill/fill_vert.glsl +10 -12
- package/lib/polygon/shaders/ocean/ocean_vert.glsl +3 -4
- package/lib/polygon/shaders/water/polygon_water_vert.glsl +5 -5
- package/lib/raster/index.d.ts +1 -1
- package/lib/raster/index.js +2 -2
- package/lib/raster/models/raster.d.ts +14 -0
- package/lib/raster/models/raster.js +12 -3
- package/lib/raster/models/rasterRgb.d.ts +14 -0
- package/lib/raster/models/rasterRgb.js +12 -3
- package/lib/raster/models/rasterTerrainRgb.d.ts +14 -0
- package/lib/raster/models/rasterTerrainRgb.js +11 -3
- package/lib/raster/shaders/raster/raster_2d_vert.glsl +6 -6
- package/lib/raster/shaders/rgb/raster_rgb_vert.glsl +11 -11
- package/lib/raster/shaders/terrain/terrain_rgb_vert.glsl +11 -11
- package/lib/tile/core/BaseLayer.js +0 -16
- package/lib/utils/extrude_polyline.d.ts +0 -15
- package/lib/utils/extrude_polyline.js +0 -217
- package/lib/wind/models/wind.d.ts +14 -0
- package/lib/wind/models/wind.js +9 -1
- package/lib/wind/shaders/wind_vert.glsl +6 -5
- package/package.json +6 -6
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
#define Animate 0.0
|
|
2
|
-
#define LineTexture 1.0
|
|
3
|
-
|
|
4
|
-
layout(location =
|
|
5
|
-
layout(location =
|
|
6
|
-
layout(location =
|
|
7
|
-
layout(location =
|
|
1
|
+
#define Animate (0.0)
|
|
2
|
+
#define LineTexture (1.0)
|
|
3
|
+
|
|
4
|
+
layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;
|
|
5
|
+
layout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;
|
|
6
|
+
layout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;
|
|
7
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;
|
|
8
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;
|
|
9
|
+
layout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;
|
|
8
10
|
|
|
9
11
|
layout(std140) uniform commonUniorm {
|
|
10
12
|
vec4 u_animate: [ 1., 2., 1.0, 0.2 ];
|
|
@@ -22,6 +24,7 @@ layout(std140) uniform commonUniorm {
|
|
|
22
24
|
float u_time;
|
|
23
25
|
float u_linearColor: 0.0;
|
|
24
26
|
};
|
|
27
|
+
|
|
25
28
|
out vec4 v_color;
|
|
26
29
|
out vec2 v_iconMapUV;
|
|
27
30
|
out vec4 v_lineData;
|
|
@@ -29,13 +32,12 @@ out vec4 v_lineData;
|
|
|
29
32
|
out vec4 v_dash_array;
|
|
30
33
|
out float v_distance_ratio;
|
|
31
34
|
|
|
32
|
-
|
|
33
35
|
#pragma include "projection"
|
|
34
36
|
#pragma include "project"
|
|
35
37
|
#pragma include "picking"
|
|
36
38
|
|
|
37
39
|
float bezier3(vec3 arr, float t) {
|
|
38
|
-
float ut = 1. - t;
|
|
40
|
+
float ut = 1.0 - t;
|
|
39
41
|
return (arr.x * ut + arr.y * t) * ut + (arr.y * ut + arr.z * t) * t;
|
|
40
42
|
}
|
|
41
43
|
vec2 midPoint(vec2 source, vec2 target, float arcThetaOffset) {
|
|
@@ -45,10 +47,12 @@ vec2 midPoint(vec2 source, vec2 target, float arcThetaOffset) {
|
|
|
45
47
|
float thetaOffset = arcThetaOffset;
|
|
46
48
|
float r2 = r / 2.0 / cos(thetaOffset);
|
|
47
49
|
float theta2 = theta + thetaOffset;
|
|
48
|
-
vec2 mid = vec2(r2*cos(theta2) + source.x, r2*sin(theta2) + source.y);
|
|
49
|
-
if(u_lineDir == 1.0) {
|
|
50
|
+
vec2 mid = vec2(r2 * cos(theta2) + source.x, r2 * sin(theta2) + source.y);
|
|
51
|
+
if (u_lineDir == 1.0) {
|
|
52
|
+
// 正向
|
|
50
53
|
return mid;
|
|
51
|
-
} else {
|
|
54
|
+
} else {
|
|
55
|
+
// 逆向
|
|
52
56
|
// (mid + vmin)/2 = (s + t)/2
|
|
53
57
|
vec2 vmid = source + target - mid;
|
|
54
58
|
return vmid;
|
|
@@ -56,23 +60,23 @@ vec2 midPoint(vec2 source, vec2 target, float arcThetaOffset) {
|
|
|
56
60
|
// return mid;
|
|
57
61
|
}
|
|
58
62
|
float getSegmentRatio(float index) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
+
// dash: index / (segmentNumber - 1.);
|
|
64
|
+
// normal: smoothstep(0.0, 1.0, index / (segmentNumber - 1.));
|
|
65
|
+
return smoothstep(0.0, 1.0, index / (segmentNumber - 1.0));
|
|
66
|
+
// return index / (segmentNumber - 1.);
|
|
63
67
|
}
|
|
64
|
-
vec2 interpolate
|
|
68
|
+
vec2 interpolate(vec2 source, vec2 target, float t, float arcThetaOffset) {
|
|
65
69
|
// if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation
|
|
66
70
|
vec2 mid = midPoint(source, target, arcThetaOffset);
|
|
67
71
|
vec3 x = vec3(source.x, mid.x, target.x);
|
|
68
72
|
vec3 y = vec3(source.y, mid.y, target.y);
|
|
69
|
-
return vec2(bezier3(x
|
|
73
|
+
return vec2(bezier3(x, t), bezier3(y, t));
|
|
70
74
|
}
|
|
71
75
|
vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {
|
|
72
76
|
// normalized direction of the line
|
|
73
77
|
vec2 dir_screenspace = normalize(line_clipspace);
|
|
74
78
|
// rotate by 90 degrees
|
|
75
|
-
|
|
79
|
+
dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
|
|
76
80
|
vec2 offset = dir_screenspace * offset_direction * setPickingSize(a_Size) / 2.0;
|
|
77
81
|
return offset;
|
|
78
82
|
}
|
|
@@ -81,43 +85,34 @@ vec2 getNormal(vec2 line_clipspace, float offset_direction) {
|
|
|
81
85
|
vec2 dir_screenspace = normalize(line_clipspace);
|
|
82
86
|
// rotate by 90 degrees
|
|
83
87
|
dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
|
|
84
|
-
return
|
|
88
|
+
return dir_screenspace.xy * sign(offset_direction);
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
void main() {
|
|
88
92
|
//vs中计算渐变色
|
|
89
|
-
if(u_linearColor==1.0){
|
|
93
|
+
if (u_linearColor == 1.0) {
|
|
90
94
|
float d_segmentIndex = a_Position.x + 1.0; // 当前顶点在弧线中所处的分段位置
|
|
91
|
-
v_color = mix(u_sourceColor, u_targetColor, d_segmentIndex/segmentNumber);
|
|
92
|
-
}
|
|
93
|
-
else{
|
|
95
|
+
v_color = mix(u_sourceColor, u_targetColor, d_segmentIndex / segmentNumber);
|
|
96
|
+
} else {
|
|
94
97
|
v_color = a_Color;
|
|
95
98
|
}
|
|
96
99
|
v_color.a = v_color.a * opacity;
|
|
97
100
|
|
|
98
|
-
vec2
|
|
99
|
-
vec2
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
vec2 source_world = a_Instance.rg; // 起始点
|
|
102
|
+
vec2 target_world = a_Instance.ba; // 终点
|
|
102
103
|
|
|
103
104
|
float segmentIndex = a_Position.x;
|
|
104
105
|
float segmentRatio = getSegmentRatio(segmentIndex);
|
|
105
106
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
vec2 t = target;
|
|
109
|
-
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
|
110
|
-
s = unProjCustomCoord(source);
|
|
111
|
-
t = unProjCustomCoord(target);
|
|
112
|
-
}
|
|
113
|
-
float total_Distance = pixelDistance(s, t) / 2.0 * PI;
|
|
107
|
+
// 计算 dashArray 和 distanceRatio 输出到片元
|
|
108
|
+
float total_Distance = pixelDistance(source_world, target_world) / 2.0 * PI;
|
|
114
109
|
v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / total_Distance;
|
|
115
110
|
v_distance_ratio = segmentIndex / segmentNumber;
|
|
116
111
|
|
|
117
112
|
float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
|
|
118
113
|
float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);
|
|
119
114
|
float d_distance_ratio;
|
|
120
|
-
|
|
115
|
+
|
|
121
116
|
if(u_animate.x == Animate) {
|
|
122
117
|
d_distance_ratio = segmentIndex / segmentNumber;
|
|
123
118
|
if(u_lineDir != 1.0) {
|
|
@@ -127,22 +122,21 @@ void main() {
|
|
|
127
122
|
|
|
128
123
|
v_lineData.b = d_distance_ratio;
|
|
129
124
|
|
|
130
|
-
vec4
|
|
131
|
-
vec4
|
|
125
|
+
vec4 source = project_position(vec4(source_world, 0, 1.), a_Instance64Low.xy);
|
|
126
|
+
vec4 target = project_position(vec4(target_world, 0, 1.), a_Instance64Low.zw);
|
|
132
127
|
|
|
133
|
-
|
|
134
|
-
vec2
|
|
128
|
+
vec2 currPos = interpolate(source.xy, target.xy, segmentRatio, thetaOffset);
|
|
129
|
+
vec2 nextPos = interpolate(source.xy, target.xy, nextSegmentRatio, thetaOffset);
|
|
135
130
|
|
|
131
|
+
vec2 offset = project_pixel(
|
|
132
|
+
getExtrusionOffset((nextPos.xy - currPos.xy) * indexDir, a_Position.y)
|
|
133
|
+
);
|
|
136
134
|
|
|
137
135
|
float d_segmentIndex = a_Position.x + 1.0; // 当前顶点在弧线中所处的分段位置
|
|
138
136
|
v_lineData.r = d_segmentIndex;
|
|
139
137
|
|
|
140
138
|
if(LineTexture == u_line_texture) { // 开启贴图模式
|
|
141
|
-
|
|
142
139
|
float arcDistrance = length(source - target); // 起始点和终点的距离
|
|
143
|
-
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20) { // amap
|
|
144
|
-
arcDistrance *= 1000000.0;
|
|
145
|
-
}
|
|
146
140
|
if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) { // mapbox
|
|
147
141
|
// arcDistrance *= 8.0;
|
|
148
142
|
arcDistrance = project_pixel_allmap(arcDistrance);
|
|
@@ -150,15 +144,15 @@ void main() {
|
|
|
150
144
|
v_iconMapUV = a_iconMapUV;
|
|
151
145
|
|
|
152
146
|
float pixelLen = project_pixel_texture(u_icon_step); // 贴图沿弧线方向的长度 - 随地图缩放改变
|
|
153
|
-
float texCount = floor(arcDistrance/pixelLen); // 贴图在弧线上重复的数量
|
|
147
|
+
float texCount = floor(arcDistrance / pixelLen); // 贴图在弧线上重复的数量
|
|
154
148
|
v_lineData.g = texCount;
|
|
155
149
|
|
|
156
150
|
float lineOffsetWidth = length(offset + offset * sign(a_Position.y)); // 线横向偏移的距离
|
|
157
151
|
float linePixelSize = project_pixel(a_Size); // 定点位置偏移
|
|
158
|
-
v_lineData.a = lineOffsetWidth/linePixelSize; // 线图层贴图部分的 v 坐标值
|
|
152
|
+
v_lineData.a = lineOffsetWidth / linePixelSize; // 线图层贴图部分的 v 坐标值
|
|
159
153
|
}
|
|
160
154
|
|
|
161
|
-
gl_Position =
|
|
155
|
+
gl_Position = project_common_position_to_clipspace(vec4(currPos.xy + offset, 0, 1.0));
|
|
162
156
|
|
|
163
157
|
setPickingColor(a_PickingColor);
|
|
164
158
|
}
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
#define LineTypeDash 1.0
|
|
3
3
|
#define Animate 0.0
|
|
4
4
|
#define LineTexture 1.0
|
|
5
|
-
|
|
6
|
-
layout(location =
|
|
7
|
-
layout(location =
|
|
8
|
-
layout(location =
|
|
9
|
-
layout(location =
|
|
5
|
+
|
|
6
|
+
layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;
|
|
7
|
+
layout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;
|
|
8
|
+
layout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;
|
|
9
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;
|
|
10
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;
|
|
11
|
+
layout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
layout(std140) uniform commonUniorm {
|
|
@@ -75,7 +77,7 @@ vec2 getNormal(vec2 line_clipspace, float offset_direction) {
|
|
|
75
77
|
vec2 dir_screenspace = normalize(line_clipspace);
|
|
76
78
|
// rotate by 90 degrees
|
|
77
79
|
dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
|
|
78
|
-
return
|
|
80
|
+
return dir_screenspace.xy * sign(offset_direction);
|
|
79
81
|
}
|
|
80
82
|
|
|
81
83
|
float torad(float deg) {
|
|
@@ -107,8 +109,8 @@ void main() {
|
|
|
107
109
|
v_color = a_Color;
|
|
108
110
|
}
|
|
109
111
|
v_color.a = v_color.a * opacity;
|
|
110
|
-
vec2 source = project_position(vec4(a_Instance.rg, 0, 0)).xy;
|
|
111
|
-
vec2 target = project_position(vec4(a_Instance.ba, 0, 0)).xy;
|
|
112
|
+
vec2 source = project_position(vec4(a_Instance.rg, 0, 0), a_Instance64Low.xy).xy;
|
|
113
|
+
vec2 target = project_position(vec4(a_Instance.ba, 0, 0), a_Instance64Low.zw).xy;
|
|
112
114
|
float segmentIndex = a_Position.x;
|
|
113
115
|
float segmentRatio = getSegmentRatio(segmentIndex);
|
|
114
116
|
float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
|
|
@@ -116,14 +118,7 @@ void main() {
|
|
|
116
118
|
float d_distance_ratio;
|
|
117
119
|
if(u_line_type == LineTypeDash) {
|
|
118
120
|
d_distance_ratio = segmentIndex / segmentNumber;
|
|
119
|
-
|
|
120
|
-
vec2 t = target;
|
|
121
|
-
|
|
122
|
-
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
|
123
|
-
s = unProjCustomCoord(source);
|
|
124
|
-
t = unProjCustomCoord(target);
|
|
125
|
-
}
|
|
126
|
-
float total_Distance = pixelDistance(s, t) / 2.0 * PI;
|
|
121
|
+
float total_Distance = pixelDistance(source, target) / 2.0 * PI;
|
|
127
122
|
v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / (total_Distance / segmentNumber * segmentIndex);
|
|
128
123
|
}
|
|
129
124
|
if(u_animate.x == Animate) {
|
|
@@ -139,7 +134,7 @@ void main() {
|
|
|
139
134
|
|
|
140
135
|
|
|
141
136
|
v_segmentIndex = a_Position.x;
|
|
142
|
-
if(LineTexture == u_line_texture && u_line_type != LineTypeDash) { // 开启贴图模式
|
|
137
|
+
if(LineTexture == u_line_texture && u_line_type != LineTypeDash) { // 开启贴图模式
|
|
143
138
|
|
|
144
139
|
float arcDistrance = length(source - target);
|
|
145
140
|
float pixelLen = project_pixel_texture(u_icon_step);
|
|
@@ -154,7 +149,7 @@ void main() {
|
|
|
154
149
|
}
|
|
155
150
|
|
|
156
151
|
|
|
157
|
-
gl_Position =
|
|
152
|
+
gl_Position = project_common_position_to_clipspace(vec4(curr.xy + project_pixel(offset), curr.z * thetaOffset, 1.0));
|
|
158
153
|
|
|
159
154
|
// 地球模式
|
|
160
155
|
if(u_globel > 0.0) {
|
|
@@ -173,10 +168,10 @@ void main() {
|
|
|
173
168
|
float lineHeight = u_global_height * (-4.0*segmentRatio*segmentRatio + 4.0 * segmentRatio) * lnglatLength;
|
|
174
169
|
// 地球点位
|
|
175
170
|
vec3 globalPoint = normalize(mix(startLngLat, endLngLat, segmentRatio)) * (globalRadius + lineHeight) + lnglatOffset * a_Size;
|
|
176
|
-
|
|
171
|
+
|
|
177
172
|
gl_Position = u_ViewProjectionMatrix * vec4(globalPoint, 1.0);
|
|
178
173
|
}
|
|
179
|
-
|
|
174
|
+
|
|
180
175
|
|
|
181
176
|
setPickingColor(a_PickingColor);
|
|
182
177
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
layout(location =
|
|
2
|
-
layout(location =
|
|
3
|
-
layout(location =
|
|
4
|
-
layout(location =
|
|
5
|
-
layout(location =
|
|
1
|
+
layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;
|
|
2
|
+
layout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;
|
|
3
|
+
layout(location = ATTRIBUTE_LOCATION_SIZE) in vec2 a_Size;
|
|
4
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;
|
|
5
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;
|
|
6
|
+
layout(location = ATTRIBUTE_LOCATION_NORMAL) in vec3 a_Normal;
|
|
6
7
|
|
|
7
8
|
layout(std140) uniform commonUniorm {
|
|
8
9
|
float u_gap_width: 1.0;
|
|
@@ -17,78 +18,59 @@ layout(std140) uniform commonUniorm {
|
|
|
17
18
|
out vec4 v_color;
|
|
18
19
|
|
|
19
20
|
vec2 project_pixel_offset(vec2 offsets) {
|
|
21
|
+
vec2 data = project_pixel(offsets);
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {
|
|
23
|
-
// P20_2 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减3
|
|
24
|
-
return data;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return vec2(data.x, -data.y);;
|
|
23
|
+
return vec2(data.x, -data.y);
|
|
28
24
|
}
|
|
29
25
|
|
|
30
26
|
vec2 line_dir(vec2 target, vec2 source) {
|
|
31
|
-
|
|
32
|
-
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {
|
|
33
|
-
// P20_2 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减3
|
|
34
|
-
return normalize(target - source);
|
|
35
|
-
}
|
|
36
27
|
return normalize(ProjectFlat(target) - ProjectFlat(source));
|
|
37
28
|
}
|
|
38
29
|
|
|
39
|
-
float flag_gap() {
|
|
40
|
-
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {
|
|
41
|
-
// P20_2 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减3
|
|
42
|
-
return 1.;
|
|
43
|
-
}
|
|
44
|
-
return -1.;
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
30
|
|
|
49
31
|
void main() {
|
|
50
|
-
|
|
51
|
-
//
|
|
52
|
-
vec2
|
|
53
|
-
vec2
|
|
54
|
-
vec2 flowlineDir = line_dir(target,source);
|
|
32
|
+
// 透明度计算
|
|
33
|
+
vec2 source_world = a_Instance.rg; // 起点
|
|
34
|
+
vec2 target_world = a_Instance.ba; // 终点
|
|
35
|
+
vec2 flowlineDir = line_dir(target_world, source_world);
|
|
55
36
|
vec2 perpendicularDir = vec2(-flowlineDir.y, flowlineDir.x); // mapbox || 高德
|
|
56
|
-
|
|
57
|
-
vec2 position = mix(
|
|
58
|
-
|
|
59
|
-
|
|
37
|
+
|
|
38
|
+
vec2 position = mix(source_world, target_world, a_Position.x);
|
|
39
|
+
vec2 position64Low = mix(a_Instance64Low.rg, a_Instance64Low.ba, a_Position.x);
|
|
40
|
+
|
|
41
|
+
float lengthCommon = length(
|
|
42
|
+
project_position(vec4(target_world, 0, 1)) - project_position(vec4(source_world, 0, 1))
|
|
43
|
+
);
|
|
60
44
|
vec2 offsetDistances = a_Size.x * project_pixel_offset(vec2(a_Position.y, a_Position.z)); // Mapbox || 高德
|
|
61
|
-
vec2 limitedOffsetDistances = clamp(
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
vec2 limitedOffsetDistances = clamp(
|
|
46
|
+
offsetDistances,
|
|
47
|
+
project_pixel(-lengthCommon * 0.2),
|
|
48
|
+
project_pixel(lengthCommon * 0.2)
|
|
64
49
|
);
|
|
65
50
|
|
|
66
|
-
|
|
67
51
|
float startOffsetCommon = project_pixel(offsets[0]);
|
|
68
52
|
float endOffsetCommon = project_pixel(offsets[1]);
|
|
69
53
|
float endpointOffset = mix(
|
|
70
|
-
clamp(startOffsetCommon, 0.0, lengthCommon
|
|
71
|
-
-clamp(endOffsetCommon, 0.0, lengthCommon
|
|
54
|
+
clamp(startOffsetCommon, 0.0, lengthCommon * 0.2),
|
|
55
|
+
-clamp(endOffsetCommon, 0.0, lengthCommon * 0.2),
|
|
72
56
|
a_Position.x
|
|
73
57
|
);
|
|
74
58
|
|
|
75
|
-
vec2 normalsCommon =
|
|
59
|
+
vec2 normalsCommon = u_stroke_width * project_pixel_offset(vec2(a_Normal.x, a_Normal.y)); // mapbox || 高德
|
|
76
60
|
|
|
77
|
-
float gapCommon =
|
|
61
|
+
float gapCommon = -1. * project_pixel(u_gap_width);
|
|
78
62
|
vec3 offsetCommon = vec3(
|
|
79
63
|
flowlineDir * (limitedOffsetDistances[1] + normalsCommon.y + endpointOffset * 1.05) -
|
|
80
|
-
|
|
64
|
+
perpendicularDir * (limitedOffsetDistances[0] + gapCommon + normalsCommon.x),
|
|
81
65
|
0.0
|
|
82
66
|
);
|
|
83
67
|
|
|
84
|
-
vec4 project_pos = project_position(vec4(position.xy, 0, 1.0));
|
|
68
|
+
vec4 project_pos = project_position(vec4(position.xy, 0, 1.0), position64Low);
|
|
85
69
|
|
|
86
70
|
vec4 fillColor = vec4(a_Color.rgb, a_Color.a * opacity);
|
|
87
71
|
v_color = mix(fillColor, vec4(u_stroke.xyz, u_stroke.w * fillColor.w * u_stroke_opacity), a_Normal.z);
|
|
88
72
|
|
|
89
|
-
gl_Position =
|
|
90
|
-
|
|
91
|
-
|
|
73
|
+
gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offsetCommon.xy, 0., 1.0));
|
|
92
74
|
|
|
93
75
|
setPickingColor(a_PickingColor);
|
|
94
76
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
#define LineTypeSolid 0.0
|
|
2
|
-
#define LineTypeDash 1.0
|
|
3
|
-
#define Animate 0.0
|
|
4
|
-
#define LineTexture 1.0
|
|
5
|
-
|
|
6
|
-
layout(location =
|
|
7
|
-
layout(location =
|
|
8
|
-
layout(location =
|
|
9
|
-
layout(location =
|
|
10
|
-
layout(location =
|
|
1
|
+
#define LineTypeSolid (0.0)
|
|
2
|
+
#define LineTypeDash (1.0)
|
|
3
|
+
#define Animate (0.0)
|
|
4
|
+
#define LineTexture (1.0)
|
|
5
|
+
|
|
6
|
+
layout(location = ATTRIBUTE_LOCATION_POSITION) in vec3 a_Position;
|
|
7
|
+
layout(location = ATTRIBUTE_LOCATION_COLOR) in vec4 a_Color;
|
|
8
|
+
layout(location = ATTRIBUTE_LOCATION_SIZE) in float a_Size;
|
|
9
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE) in vec4 a_Instance;
|
|
10
|
+
layout(location = ATTRIBUTE_LOCATION_INSTANCE_64LOW) in vec4 a_Instance64Low;
|
|
11
|
+
layout(location = ATTRIBUTE_LOCATION_UV) in vec2 a_iconMapUV;
|
|
11
12
|
|
|
12
13
|
layout(std140) uniform commonUniorm {
|
|
13
14
|
vec4 u_animate: [ 1., 2., 1.0, 0.2 ];
|
|
@@ -34,12 +35,12 @@ out float v_distance_ratio;
|
|
|
34
35
|
#pragma include "project"
|
|
35
36
|
#pragma include "picking"
|
|
36
37
|
|
|
37
|
-
float maps
|
|
38
|
+
float maps(float value, float start1, float stop1, float start2, float stop2) {
|
|
38
39
|
return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
float getSegmentRatio(float index) {
|
|
42
|
-
return index / (segmentNumber - 1.);
|
|
43
|
+
return index / (segmentNumber - 1.0);
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
float paraboloid(vec2 source, vec2 target, float ratio) {
|
|
@@ -53,33 +54,29 @@ float paraboloid(vec2 source, vec2 target, float ratio) {
|
|
|
53
54
|
vec3 getPos(vec2 source, vec2 target, float segmentRatio) {
|
|
54
55
|
float vertex_height = paraboloid(source, target, segmentRatio);
|
|
55
56
|
|
|
56
|
-
return vec3(
|
|
57
|
-
mix(source, target, segmentRatio),
|
|
58
|
-
sqrt(max(0.0, vertex_height))
|
|
59
|
-
);
|
|
57
|
+
return vec3(mix(source, target, segmentRatio), sqrt(max(0.0, vertex_height)));
|
|
60
58
|
}
|
|
61
59
|
vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {
|
|
62
60
|
// normalized direction of the line
|
|
63
61
|
vec2 dir_screenspace = normalize(line_clipspace);
|
|
64
62
|
// rotate by 90 degrees
|
|
65
|
-
|
|
66
|
-
vec2 offset = dir_screenspace * offset_direction * setPickingSize(a_Size)/ 2.0;
|
|
63
|
+
dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
|
|
64
|
+
vec2 offset = dir_screenspace * offset_direction * setPickingSize(a_Size) / 2.0;
|
|
67
65
|
return offset;
|
|
68
66
|
}
|
|
69
67
|
vec2 getNormal(vec2 line_clipspace, float offset_direction) {
|
|
70
68
|
// normalized direction of the line
|
|
71
69
|
vec2 dir_screenspace = normalize(line_clipspace);
|
|
72
70
|
// rotate by 90 degrees
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
|
|
72
|
+
return dir_screenspace.xy * sign(offset_direction);
|
|
75
73
|
}
|
|
76
|
-
float getAngularDist
|
|
74
|
+
float getAngularDist(vec2 source, vec2 target) {
|
|
77
75
|
vec2 delta = source - target;
|
|
78
76
|
vec2 sin_half_delta = sin(delta / 2.0);
|
|
79
77
|
float a =
|
|
80
78
|
sin_half_delta.y * sin_half_delta.y +
|
|
81
|
-
cos(source.y) * cos(target.y) *
|
|
82
|
-
sin_half_delta.x * sin_half_delta.x;
|
|
79
|
+
cos(source.y) * cos(target.y) * sin_half_delta.x * sin_half_delta.x;
|
|
83
80
|
return 2.0 * atan(sqrt(a), sqrt(1.0 - a));
|
|
84
81
|
}
|
|
85
82
|
|
|
@@ -90,37 +87,29 @@ vec2 midPoint(vec2 source, vec2 target) {
|
|
|
90
87
|
float thetaOffset = 0.314;
|
|
91
88
|
float r2 = r / 2.0 / cos(thetaOffset);
|
|
92
89
|
float theta2 = theta + thetaOffset;
|
|
93
|
-
vec2 mid = vec2(r2*cos(theta2) + source.x, r2*sin(theta2) + source.y);
|
|
90
|
+
vec2 mid = vec2(r2 * cos(theta2) + source.x, r2 * sin(theta2) + source.y);
|
|
94
91
|
return mid;
|
|
95
92
|
}
|
|
96
93
|
float bezier3(vec3 arr, float t) {
|
|
97
|
-
float ut = 1. - t;
|
|
94
|
+
float ut = 1.0 - t;
|
|
98
95
|
return (arr.x * ut + arr.y * t) * ut + (arr.y * ut + arr.z * t) * t;
|
|
99
96
|
}
|
|
100
97
|
|
|
101
|
-
vec2 interpolate
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
vec2 mid = midPoint(source, target);
|
|
105
|
-
vec3 x = vec3(source.x, mid.x, target.x);
|
|
106
|
-
vec3 y = vec3(source.y, mid.y, target.y);
|
|
107
|
-
return vec2(bezier3(x ,t), bezier3(y,t));
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
if(abs(angularDist - PI) < 0.001) {
|
|
111
|
-
return (1.0 - t) * source + t * target;
|
|
112
|
-
}
|
|
113
|
-
float a = sin((1.0 - t) * angularDist) / sin(angularDist);
|
|
114
|
-
float b = sin(t * angularDist) / sin(angularDist);
|
|
115
|
-
vec2 sin_source = sin(source);
|
|
116
|
-
vec2 cos_source = cos(source);
|
|
117
|
-
vec2 sin_target = sin(target);
|
|
118
|
-
vec2 cos_target = cos(target);
|
|
119
|
-
float x = a * cos_source.y * cos_source.x + b * cos_target.y * cos_target.x;
|
|
120
|
-
float y = a * cos_source.y * sin_source.x + b * cos_target.y * sin_target.x;
|
|
121
|
-
float z = a * sin_source.y + b * sin_target.y;
|
|
122
|
-
return vec2(atan(y, x), atan(z, sqrt(x * x + y * y)));
|
|
98
|
+
vec2 interpolate(vec2 source, vec2 target, float angularDist, float t) {
|
|
99
|
+
if (abs(angularDist - PI) < 0.001) {
|
|
100
|
+
return (1.0 - t) * source + t * target;
|
|
123
101
|
}
|
|
102
|
+
float a = sin((1.0 - t) * angularDist) / sin(angularDist);
|
|
103
|
+
float b = sin(t * angularDist) / sin(angularDist);
|
|
104
|
+
vec2 sin_source = sin(source);
|
|
105
|
+
vec2 cos_source = cos(source);
|
|
106
|
+
vec2 sin_target = sin(target);
|
|
107
|
+
vec2 cos_target = cos(target);
|
|
108
|
+
float x = a * cos_source.y * cos_source.x + b * cos_target.y * cos_target.x;
|
|
109
|
+
float y = a * cos_source.y * sin_source.x + b * cos_target.y * sin_target.x;
|
|
110
|
+
float z = a * sin_source.y + b * sin_target.y;
|
|
111
|
+
return vec2(atan(y, x), atan(z, sqrt(x * x + y * y)));
|
|
112
|
+
|
|
124
113
|
}
|
|
125
114
|
|
|
126
115
|
void main() {
|
|
@@ -133,54 +122,49 @@ void main() {
|
|
|
133
122
|
float segmentRatio = getSegmentRatio(segmentIndex);
|
|
134
123
|
float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
|
|
135
124
|
|
|
136
|
-
if(u_line_type == LineTypeDash) {
|
|
125
|
+
if (u_line_type == LineTypeDash) {
|
|
137
126
|
v_distance_ratio = segmentIndex / segmentNumber;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x
|
|
142
|
-
s = unProjCustomCoord(source);
|
|
143
|
-
t = unProjCustomCoord(target);
|
|
144
|
-
}
|
|
145
|
-
float total_Distance = pixelDistance(s, t) / 2.0 * PI;
|
|
146
|
-
total_Distance = total_Distance*16.0; // total_Distance*16.0 调整默认的效果
|
|
127
|
+
float total_Distance = pixelDistance(source, target) / 2.0 * PI;
|
|
128
|
+
total_Distance = total_Distance * 16.0; // total_Distance*16.0 调整默认的效果
|
|
147
129
|
v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / total_Distance;
|
|
148
130
|
}
|
|
149
131
|
|
|
150
|
-
if(u_animate.x == Animate) {
|
|
151
|
-
|
|
132
|
+
if (u_animate.x == Animate) {
|
|
133
|
+
v_distance_ratio = segmentIndex / segmentNumber;
|
|
152
134
|
}
|
|
153
135
|
|
|
154
136
|
float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);
|
|
155
137
|
v_distance_ratio = segmentIndex / segmentNumber;
|
|
156
|
-
|
|
157
|
-
vec4
|
|
138
|
+
|
|
139
|
+
vec4 curr = project_position(vec4(degrees(interpolate(source, target, angularDist, segmentRatio)), 0.0, 1.0), a_Instance64Low.xy);
|
|
140
|
+
vec4 next = project_position(vec4(degrees(interpolate(source, target, angularDist, nextSegmentRatio)), 0.0, 1.0), a_Instance64Low.zw);
|
|
141
|
+
|
|
158
142
|
// v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
|
|
159
143
|
vec2 offset = project_pixel(getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y));
|
|
160
144
|
// vec4 project_pos = project_position(vec4(curr.xy, 0, 1.0));
|
|
161
145
|
// gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, curr.z, 1.0));
|
|
162
146
|
|
|
163
147
|
v_line_data.g = a_Position.x; // 该顶点在弧线上的分段排序
|
|
164
|
-
if(LineTexture == u_line_texture) {
|
|
165
|
-
// float mapZoomScale = u_CoordinateSystem !== COORDINATE_SYSTEM_P20_2?10000000.0:1.0;
|
|
148
|
+
if (LineTexture == u_line_texture) {
|
|
166
149
|
float d_arcDistrance = length(source - target);
|
|
167
|
-
if(
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
150
|
+
if (
|
|
151
|
+
u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT ||
|
|
152
|
+
u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET
|
|
153
|
+
) {
|
|
154
|
+
// mapbox
|
|
171
155
|
d_arcDistrance = project_pixel_allmap(d_arcDistrance);
|
|
172
156
|
}
|
|
173
|
-
float d_pixelLen = project_pixel(u_icon_step)/8.0;
|
|
174
|
-
v_line_data.b = floor(d_arcDistrance/d_pixelLen); // 贴图在弧线上重复的数量
|
|
157
|
+
float d_pixelLen = project_pixel(u_icon_step) / 8.0;
|
|
158
|
+
v_line_data.b = floor(d_arcDistrance / d_pixelLen); // 贴图在弧线上重复的数量
|
|
175
159
|
|
|
176
160
|
float lineOffsetWidth = length(offset + offset * sign(a_Position.y)); // 线横向偏移的距离
|
|
177
|
-
float linePixelSize = project_pixel(a_Size);
|
|
178
|
-
v_line_data.a = lineOffsetWidth/linePixelSize;
|
|
161
|
+
float linePixelSize = project_pixel(a_Size); // 定点位置偏移,按地图等级缩放后的距离
|
|
162
|
+
v_line_data.a = lineOffsetWidth / linePixelSize; // 线图层贴图部分的 v 坐标值
|
|
179
163
|
|
|
180
164
|
v_iconMapUV = a_iconMapUV;
|
|
181
165
|
}
|
|
182
166
|
|
|
183
|
-
gl_Position =
|
|
167
|
+
gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, 0, 1.0));
|
|
184
168
|
setPickingColor(a_PickingColor);
|
|
185
169
|
}
|
|
186
170
|
|