WaterFilter reflection is now correctly rendered when the up axis of the cam is not Y
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7567 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
c4270ad91f
commit
c95c656a55
@ -194,7 +194,7 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
|||||||
|
|
||||||
public void renderFilterChain(Renderer r, FrameBuffer sceneFb) {
|
public void renderFilterChain(Renderer r, FrameBuffer sceneFb) {
|
||||||
Texture2D tex = filterTexture;
|
Texture2D tex = filterTexture;
|
||||||
FrameBuffer buff = null;
|
FrameBuffer buff = sceneFb;
|
||||||
boolean msDepth = depthTexture != null && depthTexture.getImage().getMultiSamples() > 1;
|
boolean msDepth = depthTexture != null && depthTexture.getImage().getMultiSamples() > 1;
|
||||||
for (int i = 0; i < filters.size(); i++) {
|
for (int i = 0; i < filters.size(); i++) {
|
||||||
Filter filter = filters.get(i);
|
Filter filter = filters.get(i);
|
||||||
@ -260,6 +260,9 @@ public class FilterPostProcessor implements SceneProcessor, Savable {
|
|||||||
sceneBuffer = renderFrameBufferMS;
|
sceneBuffer = renderFrameBufferMS;
|
||||||
}
|
}
|
||||||
renderFilterChain(renderer, sceneBuffer);
|
renderFilterChain(renderer, sceneBuffer);
|
||||||
|
renderManager.setCamera(viewPort.getCamera(), false);
|
||||||
|
|
||||||
|
renderer.setFrameBuffer(outputBuffer);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +49,9 @@ public final class TranslucentBucketFilter extends Filter {
|
|||||||
@Override
|
@Override
|
||||||
public void postFrame(RenderManager renderManager, ViewPort viewPort, FrameBuffer prevFilterBuffer, FrameBuffer sceneBuffer) {
|
public void postFrame(RenderManager renderManager, ViewPort viewPort, FrameBuffer prevFilterBuffer, FrameBuffer sceneBuffer) {
|
||||||
renderManager.setCamera(viewPort.getCamera(), false);
|
renderManager.setCamera(viewPort.getCamera(), false);
|
||||||
renderManager.getRenderer().copyFrameBuffer(prevFilterBuffer, sceneBuffer, false);
|
if(prevFilterBuffer != sceneBuffer){
|
||||||
|
renderManager.getRenderer().copyFrameBuffer(prevFilterBuffer, sceneBuffer, false);
|
||||||
|
}
|
||||||
renderManager.getRenderer().setFrameBuffer(sceneBuffer);
|
renderManager.getRenderer().setFrameBuffer(sceneBuffer);
|
||||||
viewPort.getQueue().renderQueue(RenderQueue.Bucket.Translucent, renderManager, viewPort.getCamera());
|
viewPort.getQueue().renderQueue(RenderQueue.Bucket.Translucent, renderManager, viewPort.getCamera());
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,7 @@ import com.jme3.scene.Spatial;
|
|||||||
import com.jme3.texture.Image.Format;
|
import com.jme3.texture.Image.Format;
|
||||||
import com.jme3.texture.Texture.WrapMode;
|
import com.jme3.texture.Texture.WrapMode;
|
||||||
import com.jme3.texture.Texture2D;
|
import com.jme3.texture.Texture2D;
|
||||||
|
import com.jme3.util.TempVars;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -166,7 +167,16 @@ public class WaterFilter extends Filter {
|
|||||||
sceneCam.getFrustumRight(),
|
sceneCam.getFrustumRight(),
|
||||||
sceneCam.getFrustumTop(),
|
sceneCam.getFrustumTop(),
|
||||||
sceneCam.getFrustumBottom());
|
sceneCam.getFrustumBottom());
|
||||||
reflectionCam.lookAt(targetLocation, Vector3f.UNIT_Y);
|
TempVars vars = TempVars.get();
|
||||||
|
assert vars.lock();
|
||||||
|
|
||||||
|
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();
|
||||||
|
reflectionCam.lookAt(targetLocation, vars.vect3);
|
||||||
|
|
||||||
|
assert vars.unlock();
|
||||||
if (inv) {
|
if (inv) {
|
||||||
reflectionCam.setAxes(reflectionCam.getLeft().negateLocal(), reflectionCam.getUp(), reflectionCam.getDirection().negateLocal());
|
reflectionCam.setAxes(reflectionCam.getLeft().negateLocal(), reflectionCam.getUp(), reflectionCam.getDirection().negateLocal());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user