Parcourir la source

AbstractShadowRenderer: fix displayFrustum (#2561)

* AbstractShadowRenderer: fix debugFrustum

* PssmShadowRenderer: fix debugFrustum

* PointLightShadowRenderer: fix debugFrustum

* SpotLightShadowRenderer: fix debugFrustum

* DirectionalLightShadowRenderer: fix debugFrustum

* Update DirectionalLightShadowRenderer: remove unused imports

* Update PointLightShadowRenderer: remove unused imports

* Update SpotLightShadowRenderer: remove unused imports

* Update PointLightShadowFilter.java

* Update PointLightShadowRenderer.java

* Revert PointLightShadowFilter.java: oops

* Update AbstractShadowRenderer.java

* Update AbstractShadowRenderer.java

* Update DirectionalLightShadowRenderer.java

* Update PssmShadowRenderer.java

* Update SpotLightShadowRenderer.java

* fix usage of getMainScene

---------

Co-authored-by: codex <[email protected]>
Wyatt Gillette il y a 2 jours
Parent
commit
c784f4b2fb

+ 11 - 1
jme3-core/src/main/java/com/jme3/shadow/AbstractShadowRenderer.java

@@ -56,6 +56,7 @@ import com.jme3.renderer.queue.OpaqueComparator;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 import com.jme3.scene.Geometry;
 import com.jme3.scene.Geometry;
+import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.debug.WireFrustum;
 import com.jme3.scene.debug.WireFrustum;
 import com.jme3.texture.FrameBuffer;
 import com.jme3.texture.FrameBuffer;
@@ -427,6 +428,10 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
         // Default implementation does nothing.
         // Default implementation does nothing.
     }
     }
 
 
+    protected Node getSceneForDebug() {
+        return (Node) viewPort.getScenes().get(0);
+    }
+
     @Override
     @Override
     public void postQueue(RenderQueue rq) {
     public void postQueue(RenderQueue rq) {
         lightReceivers.clear();
         lightReceivers.clear();
@@ -449,7 +454,10 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
             renderShadowMap(shadowMapIndex);
             renderShadowMap(shadowMapIndex);
         }
         }
 
 
-        debugfrustums = false;
+        if (debugfrustums) {
+            debugfrustums = false;
+            getSceneForDebug().updateGeometricState();
+        }
 
 
         //restore setting for future rendering
         //restore setting for future rendering
         r.setFrameBuffer(viewPort.getOutputFrameBuffer());
         r.setFrameBuffer(viewPort.getOutputFrameBuffer());
@@ -956,3 +964,5 @@ public abstract class AbstractShadowRenderer implements SceneProcessor, Savable,
         oc.write(edgesThickness, "edgesThickness", 1.0f);
         oc.write(edgesThickness, "edgesThickness", 1.0f);
     }
     }
 }
 }
+
+

+ 2 - 3
jme3-core/src/main/java/com/jme3/shadow/DirectionalLightShadowRenderer.java

@@ -44,7 +44,6 @@ import com.jme3.math.Vector3f;
 import com.jme3.renderer.Camera;
 import com.jme3.renderer.Camera;
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.renderer.queue.RenderQueue;
-import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.Cloner;
 
 
@@ -212,9 +211,9 @@ public class DirectionalLightShadowRenderer extends AbstractShadowRenderer {
 
 
     @Override
     @Override
     protected void doDisplayFrustumDebug(int shadowMapIndex) {
     protected void doDisplayFrustumDebug(int shadowMapIndex) {
-        ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex));
+        getSceneForDebug().attachChild(createFrustum(points, shadowMapIndex));
         ShadowUtil.updateFrustumPoints2(shadowCam, points);
         ShadowUtil.updateFrustumPoints2(shadowCam, points);
-        ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex));
+        getSceneForDebug().attachChild(createFrustum(points, shadowMapIndex));
     }
     }
 
 
     @Override
     @Override

+ 1 - 2
jme3-core/src/main/java/com/jme3/shadow/PointLightShadowRenderer.java

@@ -43,7 +43,6 @@ import com.jme3.renderer.Camera;
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.scene.Geometry;
 import com.jme3.scene.Geometry;
-import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
 import com.jme3.util.TempVars;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.Cloner;
@@ -166,7 +165,7 @@ public class PointLightShadowRenderer extends AbstractShadowRenderer {
         }
         }
         Geometry geo = frustums[shadowMapIndex];
         Geometry geo = frustums[shadowMapIndex];
         if (geo.getParent() == null) {
         if (geo.getParent() == null) {
-            ((Node) viewPort.getScenes().get(0)).attachChild(geo);
+            getSceneForDebug().attachChild(geo);
         }
         }
     }
     }
 
 

+ 13 - 8
jme3-core/src/main/java/com/jme3/shadow/PssmShadowRenderer.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2009-2021 jMonkeyEngine
+ * Copyright (c) 2009-2025 jMonkeyEngine
  * All rights reserved.
  * All rights reserved.
  *
  *
  * Redistribution and use in source and binary forms, with or without
  * Redistribution and use in source and binary forms, with or without
@@ -438,13 +438,9 @@ public class PssmShadowRenderer implements SceneProcessor {
             renderManager.setCamera(shadowCam, false);
             renderManager.setCamera(shadowCam, false);
 
 
             if (debugfrustums) {
             if (debugfrustums) {
-//                    frustumFromBound(b.casterBB,ColorRGBA.Blue );
-//                    frustumFromBound(b.receiverBB,ColorRGBA.Green );
-//                    frustumFromBound(b.splitBB,ColorRGBA.Yellow );
-                ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, i));
+                getSceneForDebug().attachChild(createFrustum(points, i));
                 ShadowUtil.updateFrustumPoints2(shadowCam, points);
                 ShadowUtil.updateFrustumPoints2(shadowCam, points);
-                ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, i));
-
+                getSceneForDebug().attachChild(createFrustum(points, i));
             }
             }
 
 
             r.setFrameBuffer(shadowFB[i]);
             r.setFrameBuffer(shadowFB[i]);
@@ -456,7 +452,11 @@ public class PssmShadowRenderer implements SceneProcessor {
             viewPort.getQueue().renderShadowQueue(splitOccluders, renderManager, shadowCam, true);
             viewPort.getQueue().renderShadowQueue(splitOccluders, renderManager, shadowCam, true);
             renderManager.setLightFilter(tmpLightFilter);
             renderManager.setLightFilter(tmpLightFilter);
         }
         }
-        debugfrustums = false;
+
+        if (debugfrustums) {
+            debugfrustums = false;
+            getSceneForDebug().updateGeometricState();
+        }
 
 
         //restore setting for future rendering
         //restore setting for future rendering
         r.setFrameBuffer(viewPort.getOutputFrameBuffer());
         r.setFrameBuffer(viewPort.getOutputFrameBuffer());
@@ -465,6 +465,11 @@ public class PssmShadowRenderer implements SceneProcessor {
         renderManager.setCamera(viewCam, false);
         renderManager.setCamera(viewCam, false);
 
 
     }
     }
+
+    protected Node getSceneForDebug() {
+        return (Node) viewPort.getScenes().get(0);
+    }
+
     boolean debugfrustums = false;
     boolean debugfrustums = false;
 
 
     public void displayFrustum() {
     public void displayFrustum() {

+ 3 - 4
jme3-core/src/main/java/com/jme3/shadow/SpotLightShadowRenderer.java

@@ -44,7 +44,6 @@ import com.jme3.math.Vector3f;
 import com.jme3.renderer.Camera;
 import com.jme3.renderer.Camera;
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.GeometryList;
 import com.jme3.renderer.queue.RenderQueue;
 import com.jme3.renderer.queue.RenderQueue;
-import com.jme3.scene.Node;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.Spatial;
 import com.jme3.util.TempVars;
 import com.jme3.util.TempVars;
 import com.jme3.util.clone.Cloner;
 import com.jme3.util.clone.Cloner;
@@ -89,7 +88,7 @@ public class SpotLightShadowRenderer extends AbstractShadowRenderer {
         init(shadowMapSize);
         init(shadowMapSize);
     }
     }
 
 
-    
+
     private void init(int shadowMapSize) {
     private void init(int shadowMapSize) {
         shadowCam = new Camera(shadowMapSize, shadowMapSize);
         shadowCam = new Camera(shadowMapSize, shadowMapSize);
         for (int i = 0; i < points.length; i++) {
         for (int i = 0; i < points.length; i++) {
@@ -175,9 +174,9 @@ public class SpotLightShadowRenderer extends AbstractShadowRenderer {
     protected void doDisplayFrustumDebug(int shadowMapIndex) {
     protected void doDisplayFrustumDebug(int shadowMapIndex) {
         Vector3f[] points2 = points.clone();
         Vector3f[] points2 = points.clone();
 
 
-        ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points, shadowMapIndex));
+        getSceneForDebug().attachChild(createFrustum(points, shadowMapIndex));
         ShadowUtil.updateFrustumPoints2(shadowCam, points2);
         ShadowUtil.updateFrustumPoints2(shadowCam, points2);
-        ((Node) viewPort.getScenes().get(0)).attachChild(createFrustum(points2, shadowMapIndex));
+        getSceneForDebug().attachChild(createFrustum(points2, shadowMapIndex));
     }
     }
 
 
     @Override
     @Override