فهرست منبع

Fix local cube maps bug

David Catuhe 7 سال پیش
والد
کامیت
3772824a57
2فایلهای تغییر یافته به همراه14 افزوده شده و 9 حذف شده
  1. 14 9
      src/Shaders/ShadersInclude/reflectionFunction.fx
  2. BIN
      tests/validation/ReferenceImages/refprobe.png

+ 14 - 9
src/Shaders/ShadersInclude/reflectionFunction.fx

@@ -61,20 +61,25 @@ vec3 computeReflectionCoords(vec4 worldPos, vec3 worldNormal)
 #endif
 
 #ifdef REFLECTIONMAP_CUBIC
-	vec3 viewDir = worldPos.xyz - vEyePosition.xyz;
-	vec3 coords = reflect(viewDir, worldNormal);
-#ifdef INVERTCUBICMAP
-	coords.y = 1.0 - coords.y;
-#endif
+    vec3 viewDir = normalize(worldPos.xyz - vEyePosition.xyz);
 
-#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC
-	coords = parallaxCorrectNormal(worldPos.xyz, coords, vReflectionSize, vReflectionPosition );
-#endif
+    // worldNormal has already been normalized.
+    vec3 coords = reflect(viewDir, worldNormal);
 
+    #ifdef USE_LOCAL_REFLECTIONMAP_CUBIC
+        coords = parallaxCorrectNormal(worldPos.xyz, coords, vReflectionSize, vReflectionPosition);
+    #endif
 
-	return vec3(reflectionMatrix * vec4(coords, 0));
+    coords = vec3(reflectionMatrix * vec4(coords, 0));
+    
+    #ifdef INVERTCUBICMAP
+        coords.y *= -1.0;
+    #endif
+
+    return coords;
 #endif
 
+
 #ifdef REFLECTIONMAP_PROJECTION
 	return vec3(reflectionMatrix * (view * worldPos));
 #endif

BIN
tests/validation/ReferenceImages/refprobe.png