123456789101112131415161718192021222324252627282930313233343536373839 |
- uniform sampler2D colorTexture;
- uniform sampler2D blurTexture;
- uniform sampler2D depthTexture;
- uniform float focalDistance;
- varying vec2 v_textureCoordinates;
- vec4 toEye(vec2 uv, float depth)
- {
- vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0));
- vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0);
- posInCamera = posInCamera / posInCamera.w;
- return posInCamera;
- }
- float computeDepthBlur(float depth)
- {
- float f;
- if (depth < focalDistance)
- {
- f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x);
- }
- else
- {
- f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance);
- f = pow(f, 0.1);
- }
- f *= f;
- f = clamp(f, 0.0, 1.0);
- return pow(f, 0.5);
- }
- void main(void)
- {
- float depth = czm_readDepth(depthTexture, v_textureCoordinates);
- vec4 posInCamera = toEye(v_textureCoordinates, depth);
- float d = computeDepthBlur(-posInCamera.z);
- gl_FragColor = mix(texture2D(colorTexture, v_textureCoordinates), texture2D(blurTexture, v_textureCoordinates), d);
- }
|