Add existing to tracked
This commit is contained in:
+75
@@ -0,0 +1,75 @@
|
||||
//This file is automatically rebuilt by the Cesium build process.
|
||||
export default "uniform highp sampler2D u_vectorSegmentTexture;\n\
|
||||
uniform highp sampler2D u_vectorWidthTexture;\n\
|
||||
uniform highp sampler2D u_vectorColorTexture;\n\
|
||||
uniform highp sampler2D u_vectorSegmentPrimitiveIndicesTexture;\n\
|
||||
uniform highp sampler2D u_vectorGridCellIndicesTexture;\n\
|
||||
\n\
|
||||
// UV-space offset from the closest point on the segment to p.\n\
|
||||
vec2 vectorOffsetToLine(vec2 p, vec4 line)\n\
|
||||
{\n\
|
||||
vec2 a = line.xy;\n\
|
||||
vec2 b = line.zw;\n\
|
||||
vec2 ab = b - a;\n\
|
||||
float abLengthSquared = dot(ab, ab);\n\
|
||||
if (abLengthSquared < 1.0e-8)\n\
|
||||
{\n\
|
||||
return p - a;\n\
|
||||
}\n\
|
||||
float t = clamp(dot(p - a, ab) / abLengthSquared, 0.0, 1.0);\n\
|
||||
return p - (a + t * ab);\n\
|
||||
}\n\
|
||||
\n\
|
||||
ivec2 vectorIndexToUv(int index, ivec2 size)\n\
|
||||
{\n\
|
||||
int v = index / size.x;\n\
|
||||
int u = index - v * size.x;\n\
|
||||
return ivec2(u, v);\n\
|
||||
}\n\
|
||||
\n\
|
||||
// Drape clamped vector polylines onto the terrain surface. The fragment's\n\
|
||||
// tile UV picks a grid cell, then only that cell's line segments (packed in\n\
|
||||
// tile-local UV space) are tested for proximity. Within the line width, the\n\
|
||||
// vector color is alpha-composited over the terrain (no discard).\n\
|
||||
vec4 vectorPolylineRender(vec2 vectorUv, vec4 baseColor)\n\
|
||||
{\n\
|
||||
// Inverse UV-per-pixel Jacobian: measures line distance in screen pixels so\n\
|
||||
// width stays constant under anisotropic (oblique) foreshortening.\n\
|
||||
mat2 screenFromUv = inverse(mat2(dFdx(vectorUv), dFdy(vectorUv)));\n\
|
||||
int gridWidth = int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(0, 0), 0).r);\n\
|
||||
int gridHeight = int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(1, 0), 0).r);\n\
|
||||
int cellX = clamp(int(vectorUv.x * float(gridWidth)), 0, gridWidth - 1);\n\
|
||||
int cellY = clamp(int(vectorUv.y * float(gridHeight)), 0, gridHeight - 1);\n\
|
||||
int cellIndex = cellX + cellY * gridWidth;\n\
|
||||
\n\
|
||||
int indexEnd = int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(cellIndex + 2, 0), 0).r);\n\
|
||||
int indexStart = cellIndex == 0\n\
|
||||
? 0\n\
|
||||
: int(texelFetch(u_vectorGridCellIndicesTexture, ivec2(cellIndex + 1, 0), 0).r);\n\
|
||||
\n\
|
||||
ivec2 segmentTextureSize = textureSize(u_vectorSegmentTexture, 0);\n\
|
||||
ivec2 primitiveTextureSize = textureSize(u_vectorWidthTexture, 0);\n\
|
||||
\n\
|
||||
for (int i = indexStart; i < indexEnd; i++)\n\
|
||||
{\n\
|
||||
ivec2 segmentUv = vectorIndexToUv(i, segmentTextureSize);\n\
|
||||
vec4 segment = texelFetch(u_vectorSegmentTexture, segmentUv, 0);\n\
|
||||
\n\
|
||||
int primitiveIndex = int(texelFetch(u_vectorSegmentPrimitiveIndicesTexture, segmentUv, 0).r);\n\
|
||||
ivec2 primitiveUv = vectorIndexToUv(primitiveIndex, primitiveTextureSize);\n\
|
||||
\n\
|
||||
float lineWidth = texelFetch(u_vectorWidthTexture, primitiveUv, 0).r * 255.0;\n\
|
||||
\n\
|
||||
vec2 offsetUv = vectorOffsetToLine(vectorUv, segment);\n\
|
||||
if (length(screenFromUv * offsetUv) < lineWidth)\n\
|
||||
{\n\
|
||||
// Alpha-composite vector over terrain.\n\
|
||||
vec4 vectorColor = texelFetch(u_vectorColorTexture, primitiveUv, 0);\n\
|
||||
baseColor = vectorColor * vec4(vectorColor.aaa, 1.0) + baseColor * (1.0 - vectorColor.a);\n\
|
||||
break;\n\
|
||||
}\n\
|
||||
}\n\
|
||||
\n\
|
||||
return baseColor;\n\
|
||||
}\n\
|
||||
";
|
||||
Reference in New Issue
Block a user