1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
const std::string depthGenFragShader =
"#version 130 \n"
"uniform sampler2D depthBuffer;"
"uniform sampler2D heightMap;"
"uniform sampler2D texture;"
"uniform vec3 resolution;"
"uniform float haveTexture;"
"uniform float maxM;"
"uniform float maxP;"
"uniform float m;"
"uniform float p;"
"in mat4 projMat;"
"void main () {"
"vec2 position = ( gl_FragCoord.xy / resolution.xy );"
"vec4 color = texture2D(depthBuffer, position);"
"vec4 pixel = (haveTexture==1) ? gl_Color * texture2D(texture, gl_TexCoord[0].xy) : gl_Color;"
"float z = (gl_FragCoord.w != 1.f) ? (inverse(projMat) * vec4(0, 0, 0, gl_FragCoord.w)).w : gl_FragCoord.z;"
"float intensity = (maxM != 0) ? m / maxM : 0.f;"
"float power = (maxP != 0) ? p / maxP : 0.f;"
"if (z >= color.z && pixel.a >= color.a) {"
"gl_FragColor = vec4(z, pixel.a, z, pixel.a);"
"} else {"
"gl_FragColor = vec4(z, pixel.a, color.b, color.a);"
"}"
"}";
const std::string frameBufferGenFragShader =
"#version 130 \n"
"uniform sampler2D depthBuffer;"
"uniform sampler2D frameBuffer;"
"uniform sampler2D texture;"
"uniform vec3 resolution;"
"uniform float haveTexture;"
"in mat4 projMat;"
"void main () {"
"vec2 position = ( gl_FragCoord.xy / resolution.xy );"
"vec4 depth = texture2D(depthBuffer, position);"
"vec4 color = texture2D(frameBuffer, position);"
"vec4 pixel = (haveTexture==1) ? gl_Color * texture2D(texture, gl_TexCoord[0].xy) : gl_Color;"
"float z = (gl_FragCoord.w != 1.f) ? (inverse(projMat) * vec4(0, 0, 0, gl_FragCoord.w)).w : gl_FragCoord.z;"
"if (z >= depth.r) {"
"gl_FragColor = pixel * pixel.a + color * (1 - pixel.a) /*pixel*/;"
"gl_FragColor.a = color.a + pixel.a * (1 - color.a);"
"} else {"
"gl_FragColor = color * depth.g + pixel * (1 - depth.g) /*color*/;"
"gl_FragColor.a = pixel.a + color.a * (1 - pixel.a);"
"}"
"}"; |
Partager