فهرست منبع

Update MaterialFog.glsllib

Ryan McDonough 7 ماه پیش
والد
کامیت
16fe8aae19
1فایلهای تغییر یافته به همراه51 افزوده شده و 16 حذف شده
  1. 51 16
      jme3-core/src/main/resources/Common/ShaderLib/MaterialFog.glsllib

+ 51 - 16
jme3-core/src/main/resources/Common/ShaderLib/MaterialFog.glsllib

@@ -1,25 +1,60 @@
+#ifndef __MATERIAL_FOG_UTIL__
+    #define __MATERIAL_FOG_UTIL__
 
-vec4 getFogLinear(in vec4 diffuseColor, in vec4 fogColor, in float start, in float end, in float distance) {
 
-    float fogFactor = (end - distance) / (end - start);
-    fogFactor = clamp(fogFactor, 0.0, 1.0);
+    vec4 getFogLinear(in vec4 diffuseColor, in vec4 fogColor, in float start, in float end, in float distance) {
 
-    return mix(fogColor, diffuseColor, fogFactor);
-}
+        float fogFactor = (end - distance) / (end - start);
+        fogFactor = clamp(fogFactor, 0.0, 1.0);
 
-vec4 getFogExp(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
+        return mix(fogColor, diffuseColor, fogFactor);
+    }
 
-    float fogFactor = 1.0 / exp(distance * fogDensity);
-    fogFactor = clamp( fogFactor, 0.0, 1.0 );
+    vec4 getFogExp(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
 
-    return mix(fogColor, diffuseColor, fogFactor);
-}
+        float fogFactor = 1.0 / exp(distance * fogDensity);
+        fogFactor = clamp( fogFactor, 0.0, 1.0 );
 
-vec4 getFogExpSquare(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
+        return mix(fogColor, diffuseColor, fogFactor);
+    }
 
-    float fogFactor = 1.0 / exp( (distance * fogDensity) * (distance * fogDensity));
-    fogFactor = clamp( fogFactor, 0.0, 1.0 );
+    vec4 getFogExpSquare(in vec4 diffuseColor, in vec4 fogColor, in float fogDensity, in float distance) {
 
-    vec4 finalColor = mix(fogColor, diffuseColor, fogFactor);
-    return finalColor;
-}
+        float fogFactor = 1.0 / exp( (distance * fogDensity) * (distance * fogDensity));
+        fogFactor = clamp( fogFactor, 0.0, 1.0 );
+
+        vec4 finalColor = mix(fogColor, diffuseColor, fogFactor);
+        return finalColor;
+    }
+
+    #if defined(USE_FOG)
+        uniform vec4 m_FogColor;
+        varying float fogDistance;
+
+        uniform vec2 m_LinearFog;
+
+        #ifdef FOG_EXP
+            uniform float m_ExpFog;
+        #endif
+
+        #ifdef FOG_EXPSQ
+            uniform float m_ExpSqFog;        
+        #endif
+        
+
+        vec4 MaterialFog_calculateFogColor(in vec4 fragColor){
+            #ifdef FOG_LINEAR
+                fragColor = getFogLinear(fragColor, m_FogColor, m_LinearFog.x, m_LinearFog.y, fogDistance);
+            #endif
+            #ifdef FOG_EXP
+                fragColor = getFogExp(fragColor, m_FogColor, m_ExpFog, fogDistance);
+            #endif
+            #ifdef FOG_EXPSQ
+                fragColor = getFogExpSquare(fragColor, m_FogColor, m_ExpSqFog, fogDistance);
+            #endif
+
+            return fragColor;
+        }           
+
+    #endif   
+#endif