Heatmap / add hit detection shaders
This commit is contained in:
@@ -220,6 +220,51 @@ class Heatmap extends VectorLayer {
|
||||
float alpha = smoothstep(0.0, 1.0, value) * v_weight;
|
||||
gl_FragColor = vec4(alpha, alpha, alpha, alpha);
|
||||
}`,
|
||||
hitVertexShader: `
|
||||
precision mediump float;
|
||||
uniform mat4 u_projectionMatrix;
|
||||
uniform mat4 u_offsetScaleMatrix;
|
||||
uniform float u_size;
|
||||
attribute vec2 a_position;
|
||||
attribute float a_index;
|
||||
attribute float a_weight;
|
||||
attribute vec4 a_hitColor;
|
||||
|
||||
varying vec2 v_texCoord;
|
||||
varying float v_weight;
|
||||
varying vec4 v_hitColor;
|
||||
|
||||
void main(void) {
|
||||
mat4 offsetMatrix = u_offsetScaleMatrix;
|
||||
float offsetX = a_index == 0.0 || a_index == 3.0 ? -u_size / 2.0 : u_size / 2.0;
|
||||
float offsetY = a_index == 0.0 || a_index == 1.0 ? -u_size / 2.0 : u_size / 2.0;
|
||||
vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);
|
||||
gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;
|
||||
float u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;
|
||||
float v = a_index == 0.0 || a_index == 1.0 ? 0.0 : 1.0;
|
||||
v_texCoord = vec2(u, v);
|
||||
v_hitColor = a_hitColor;
|
||||
v_weight = a_weight;
|
||||
}`,
|
||||
hitFragmentShader: `
|
||||
precision mediump float;
|
||||
uniform float u_blurSlope;
|
||||
|
||||
varying vec2 v_texCoord;
|
||||
varying float v_weight;
|
||||
varying vec4 v_hitColor;
|
||||
|
||||
void main(void) {
|
||||
vec2 texCoord = v_texCoord * 2.0 - vec2(1.0, 1.0);
|
||||
float sqRadius = texCoord.x * texCoord.x + texCoord.y * texCoord.y;
|
||||
float value = (1.0 - sqrt(sqRadius)) * u_blurSlope;
|
||||
float alpha = smoothstep(0.0, 1.0, value) * v_weight;
|
||||
if (alpha < 0.05) {
|
||||
discard;
|
||||
}
|
||||
|
||||
gl_FragColor = v_hitColor;
|
||||
}`,
|
||||
uniforms: {
|
||||
u_size: function() {
|
||||
return (this.get(Property.RADIUS) + this.get(Property.BLUR)) * 2;
|
||||
|
||||
Reference in New Issue
Block a user