소스 검색

Fix divide by 0 in shadow utils for some scenes #2209 (#2210)

Riccardo Balbo 1 년 전
부모
커밋
e584cb194c
1개의 변경된 파일6개의 추가작업 그리고 3개의 파일을 삭제
  1. 6 3
      jme3-core/src/main/java/com/jme3/shadow/ShadowUtil.java

+ 6 - 3
jme3-core/src/main/java/com/jme3/shadow/ShadowUtil.java

@@ -569,8 +569,10 @@ public class ShadowUtil {
         float scaleX, scaleY, scaleZ;
         float scaleX, scaleY, scaleZ;
         float offsetX, offsetY, offsetZ;
         float offsetX, offsetY, offsetZ;
 
 
-        scaleX = (2.0f) / (cropMax.x - cropMin.x);
-        scaleY = (2.0f) / (cropMax.y - cropMin.y);
+        float deltaCropX = cropMax.x - cropMin.x;
+        float deltaCropY = cropMax.y - cropMin.y;
+        scaleX = deltaCropX == 0 ? 0 : 2.0f / deltaCropX;
+        scaleY = deltaCropY == 0 ? 0 : 2.0f / deltaCropY;
 
 
         //Shadow map stabilization approximation from shaderX 7
         //Shadow map stabilization approximation from shaderX 7
         //from Practical Cascaded Shadow maps adapted to PSSM
         //from Practical Cascaded Shadow maps adapted to PSSM
@@ -595,7 +597,8 @@ public class ShadowUtil {
             offsetY = FastMath.ceil(offsetY * halfTextureSize) / halfTextureSize;
             offsetY = FastMath.ceil(offsetY * halfTextureSize) / halfTextureSize;
         }
         }
 
 
-        scaleZ = 1.0f / (cropMax.z - cropMin.z);
+        float deltaCropZ = cropMax.z - cropMin.z;
+        scaleZ = deltaCropZ == 0 ? 0 : 1.0f / deltaCropZ;
         offsetZ = -cropMin.z * scaleZ;
         offsetZ = -cropMin.z * scaleZ;