#version 330 core #define $colorType$ in vec3 pos; in vec3 normal; #if defined(TEXTURE_COLORS) || defined(TEXTURE_AND_VERTEX_COLORS) in vec2 uv; #endif #if defined(VERTEX_COLORS) || defined(TEXTURE_AND_VERTEX_COLORS) in vec3 vertColor; #endif uniform sampler2D textureSampler; uniform sampler2D lastDepthMap; uniform float reflectivity; uniform bool firstPass; uniform float depthMargin; uniform vec3 cameraDir; layout (location = 0) out vec3 color; //layout (location = 1) out float depthOut; layout (location = 1) out float angleOut; layout (location = 2) out vec3 normalOut; layout (location = 3) out float reflectivityOut; void main() { #if defined(TEXTURE_COLORS) vec4 fullColor = texture(textureSampler, uv); #endif #if defined(VERTEX_COLORS) vec4 fullColor = vec4(vertColor, 1.0f); #endif #if defined(TEXTURE_AND_VERTEX_COLORS) vec4 fullColor = texture(textureSampler, uv) * vec4(vertColor, 1.0f); #endif #ifdef NO_COLORS vec4 fullColor = vec4(1.0f); #endif //Discard transparent fragments if (fullColor.a < 0.5) { discard; } else { float lastDepth = texelFetch(lastDepthMap, ivec2(gl_FragCoord.x, gl_FragCoord.y), 0).r; if (!firstPass && (lastDepth - gl_FragCoord.z) >= -depthMargin) { discard; } color = fullColor.rgb; //vec3 lightDirection = normalize(vec3(0.25, -0.6, -1)); //color *= 0.3 + 0.7 * max(dot(-lightDirection, normalize(normal)), 0); // Scale the normal between 0 and 1 normalOut = 0.5 + (normal * 0.5); // Calculate the angle of the normal of this position with the camera //angleOut = 1.; if (normal == vec3(0)) angleOut = 1; else angleOut = abs(dot(cameraDir, normalize(normal))); } reflectivityOut = reflectivity; }