If left and right frustum absolute values is not equal the following problems appear:
1: Using dynamic culling; wrong objects are culled (AbstractCamera.java)
[java]### Eclipse Workspace Patch 1.0
#P jMonkeyEngine
Index: src/com/jme/renderer/AbstractCamera.java
===================================================================
— src/com/jme/renderer/AbstractCamera.java (revision 4862)
+++ src/com/jme/renderer/AbstractCamera.java (working copy)
@@ -814,11 +814,11 @@
float topSquared = frustumTop * frustumTop;
float inverseLength = FastMath.invSqrt( nearSquared + leftSquared );
-
coeffLeft[0] = frustumNear * inverseLength;<br />
-
coeffLeft[0] = -frustumNear * inverseLength;<br />
coeffLeft[1] = -frustumLeft * inverseLength;
inverseLength = FastMath.invSqrt( nearSquared + rightSquared );
-
coeffRight[0] = -frustumNear * inverseLength;<br />
-
coeffRight[0] = frustumNear * inverseLength;<br />
coeffRight[1] = frustumRight * inverseLength;
inverseLength = FastMath.invSqrt( nearSquared + bottomSquared );
[/java]
2: The projecte grid (water) boundaries are wrong (ProjectedGrid.java)
[java]### Eclipse Workspace Patch 1.0
#P jMonkeyEngine
Index: src/com/jmex/effects/water/ProjectedGrid.java
===================================================================
— src/com/jmex/effects/water/ProjectedGrid.java (revision 5365)
+++ src/com/jmex/effects/water/ProjectedGrid.java (working copy)
@@ -56,7 +56,7 @@
-
@author Rikard Herlitz (MrCoder)
*/
public class ProjectedGrid extends TriMesh {
- private static final long serialVersionUID = 1L;
- private static final long serialVersionUID = 1L;
private int sizeX;
private int sizeY;
@@ -153,6 +153,17 @@
super.draw( r );
}
- protected Matrix4f updateProjectionMatrix(Camera cam, Matrix4f m) {
- ProjectedTextureUtil.matrixFrustum(cam.getFrustumLeft() - 0.2f,
-
cam.getFrustumRight() + 0.9f,<br />
-
cam.getFrustumBottom() - 0.6f,<br />
-
cam.getFrustumTop(),<br />
-
cam.getFrustumNear(),<br />
-
cam.getFrustumFar(),<br />
-
m );<br />
- return m;
- }
+
public void update() {
if( freezeProjector ) return;
@@ -189,7 +200,7 @@
}
ProjectedTextureUtil.matrixLookAt( projectorLoc, realPoint, Vector3f.UNIT_Y, modelViewMatrix );
-
ProjectedTextureUtil.matrixProjection( fovY + 10.0f, getAspectRatio(), cam.getFrustumNear(), cam.getFrustumFar(), projectionMatrix );<br />
-
projectionMatrix = updateProjectionMatrix(cam, projectionMatrix);<br />
modelViewProjectionInverse.set( modelViewMatrix ).multLocal( projectionMatrix );
modelViewProjectionInverse.invertLocal();
[/java]
[java]### Eclipse Workspace Patch 1.0
#P jMonkeyEngine
Index: src/com/jmex/effects/ProjectedTextureUtil.java
===================================================================
— src/com/jmex/effects/ProjectedTextureUtil.java (revision 4862)
+++ src/com/jmex/effects/ProjectedTextureUtil.java (working copy)
@@ -162,8 +162,8 @@
checkCamera();
-
camera.setFrustum( frustumFar, frustumFar, frustumLeft, frustumRight,<br />
-
frustumTop, frustumFar );<br />
-
camera.setFrustum( frustumNear, frustumFar, frustumLeft, frustumRight,<br />
-
frustumTop, frustumBottom);<br />
result.set( camera.getProjectionMatrix() );
}
[/java]