From d80616ef8918d24332736128f57963ef0cccdded Mon Sep 17 00:00:00 2001 From: "nor..67" Date: Thu, 31 Mar 2011 22:42:13 +0000 Subject: [PATCH] - add rotation fix for SimpleWater plane , thanks to @batkid http://jmonkeyengine.org/groups/effects/forum/topic/changing-the-rotation-of-simplewaterprocessor/ git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7147 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../com/jme3/water/SimpleWaterProcessor.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/engine/src/desktop-fx/com/jme3/water/SimpleWaterProcessor.java b/engine/src/desktop-fx/com/jme3/water/SimpleWaterProcessor.java index bbb89f57e..a54e4970f 100644 --- a/engine/src/desktop-fx/com/jme3/water/SimpleWaterProcessor.java +++ b/engine/src/desktop-fx/com/jme3/water/SimpleWaterProcessor.java @@ -54,6 +54,7 @@ import com.jme3.texture.Image.Format; import com.jme3.texture.Texture.WrapMode; import com.jme3.texture.Texture2D; import com.jme3.ui.Picture; +import com.jme3.util.TempVars; /** * @@ -179,7 +180,16 @@ public class SimpleWaterProcessor implements SceneProcessor { sceneCam.getFrustumRight(), sceneCam.getFrustumTop(), sceneCam.getFrustumBottom()); - reflectionCam.lookAt(targetLocation, Vector3f.UNIT_Y); + TempVars vars=TempVars.get(); + vars.lock(); + // tempVec and calcVect are just temporary vector3f objects + vars.vect1.set( sceneCam.getLocation() ).addLocal( sceneCam.getUp() ); + float planeDistance = plane.pseudoDistance( vars.vect1 ); + vars.vect2.set(plane.getNormal()).multLocal( planeDistance * 2.0f ); + vars.vect3.set( vars.vect1.subtractLocal( vars.vect2 ) ).subtractLocal( loc ).normalizeLocal().negateLocal(); + // now set the up vector + reflectionCam.lookAt(targetLocation, vars.vect3); + vars.unlock(); if (inv) { reflectionCam.setAxes(reflectionCam.getLeft().negateLocal(), reflectionCam.getUp(), reflectionCam.getDirection().negateLocal()); }