package de.swagner.ld22.shader;
public class DiffuseShaderFogWobble {
public static final String mVertexShader =
"attribute vec4 a_position;\n" +
"attribute vec4 a_normal;\n" +
"attribute vec2 a_texCoord0;\n" +
"uniform mat4 VPMatrix;\n"+
"uniform mat4 MMatrix;\n"+
"uniform float time;\n"+
"varying vec3 vLightWeighting;\n"+
"varying vec2 vTextureCoord;\n"+
"vec4 wobble(vec4 pos){\n" +
" pos.x = pos.x + sin(pos.y+time)*0.5;\n" +
" pos.z = pos.z + cos(pos.x+time)*0.5;\n" +
"return pos;\n" +
"}\n" +
"void main() {\n"+
" gl_Position = ((VPMatrix * MMatrix) * wobble(a_position));\n"+
" vTextureCoord = a_texCoord0;\n"+
" float directionalLightWeighting = max(dot(a_normal.xyz,vec3(0.0,-0.5,-0.5)), 0.0);\n"+
" vLightWeighting = vec3(0.05,0.05,0.05) * directionalLightWeighting;\n"+
"}\n";
public static final String mFragmentShader =
"#ifdef GL_ES\n" +
"precision mediump float;\n" +
"#endif\n" +
"uniform vec4 a_color;\n"+
"uniform vec4 uFogColor;\n"+
"varying vec3 vLightWeighting;\n"+
"varying vec2 vTextureCoord;\n"+
"uniform sampler2D uSampler;\n"+
"void main() {\n"+
"float z = gl_FragCoord.z / gl_FragCoord.w;\n"+
"float fogFactor = exp2(-0.08 * 0.08 * z* z * 0.442695);\n"+
"fogFactor = clamp(fogFactor,0.0,1.0);\n"+
"vec4 fragColor = vec4(texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t)).rgb + vLightWeighting, 1.0);\n"+
"gl_FragColor = mix((uFogColor), fragColor, fogFactor);\n"+
"}\n";
}