From e406988ed33e4ef26ac979784b0d71b21001ec02 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 26 Nov 2013 17:18:03 -0800 Subject: [PATCH] Partial fix for ambient occlusion with Oculus. --- interface/resources/shaders/ambient_occlusion.frag | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/interface/resources/shaders/ambient_occlusion.frag b/interface/resources/shaders/ambient_occlusion.frag index b3a054cc67..783c0f67da 100644 --- a/interface/resources/shaders/ambient_occlusion.frag +++ b/interface/resources/shaders/ambient_occlusion.frag @@ -54,11 +54,15 @@ void main(void) { vec3 center = texCoordToViewSpace(gl_TexCoord[0].st); + vec2 rdenominator = 1.0 / (rightTop - leftBottom); + vec2 xyFactor = 2.0 * near * rdenominator; + vec2 zFactor = (rightTop + leftBottom) * rdenominator; + float occlusion = 4.0; for (int i = 0; i < SAMPLE_KERNEL_SIZE; i++) { vec3 offset = center + rotation * (radius * sampleKernel[i]); - vec4 projected = gl_ProjectionMatrix * vec4(offset, 1.0); - float depth = texCoordToViewSpaceZ(projected.xy * 0.5 / projected.w + vec2(0.5, 0.5)); + vec2 projected = offset.xy * xyFactor + offset.z * zFactor; + float depth = texCoordToViewSpaceZ(projected * -0.5 / offset.z + vec2(0.5, 0.5)); occlusion += 1.0 - step(offset.z, depth); }