Hello!
Today I came across weird bug: I can’t use anything with Billboard Control when there is water in the scene(either Postprocess or Simple Water). I have latest nightly build. Here is the error:
[java]SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,6,main]
java.lang.IllegalStateException: Scene graph is not properly updated for rendering.
Make sure scene graph state was not changed after
rootNode.updateGeometricState() call.
Problem spatial name: Root Node
at com.jme3.scene.Spatial.checkCulling(Spatial.java:211)
at com.jme3.renderer.RenderManager.renderScene(RenderManager.java:503)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:724)
at com.jme3.water.WaterFilter.postQueue(WaterFilter.java:179)
at com.jme3.post.FilterPostProcessor.postQueue(FilterPostProcessor.java:188)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:729)
at com.jme3.renderer.RenderManager.render(RenderManager.java:757)
at com.jme3.app.SimpleApplication.update(SimpleApplication.java:257)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:144)
at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:172)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:218)
at java.lang.Thread.run(Thread.java:662)
Java Result: 143[/java]
And here is an example:
[java]package jme3test.model.shape;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.control.BillboardControl;
import com.jme3.scene.shape.Box;
import com.jme3.scene.shape.Quad;
import com.jme3.water.WaterFilter;
import com.jme3.post.FilterPostProcessor;
public class TestBillboard extends SimpleApplication {
private FilterPostProcessor fpp;
private WaterFilter water;
private Vector3f lightDir = new Vector3f(-4.9f, -1.3f, 5.9f); // same as light source
private float initialWaterHeight = 0.8f; // choose a value for your scene
public void simpleInitApp() {
fpp = new FilterPostProcessor(assetManager);
water = new WaterFilter(rootNode, lightDir);
water.setWaterHeight(initialWaterHeight);
fpp.addFilter(water);
viewPort.addProcessor(fpp);
flyCam.setMoveSpeed(10);
Quad q = new Quad(2, 2);
Geometry g = new Geometry(“Quad”, q);
Material mat = new Material(assetManager, “Common/MatDefs/Misc/Unshaded.j3md”);
mat.setColor(“Color”, ColorRGBA.Blue);
g.setMaterial(mat);
Quad q2 = new Quad(1, 1);
Geometry g3 = new Geometry(“Quad2”, q2);
Material mat2 = new Material(assetManager, “Common/MatDefs/Misc/Unshaded.j3md”);
mat2.setColor(“Color”, ColorRGBA.Yellow);
g3.setMaterial(mat2);
g3.setLocalTranslation(.5f, .5f, .01f);
Box b = new Box(new Vector3f(0, 0, 3), .25f, .5f, .25f);
Geometry g2 = new Geometry(“Box”, b);
g2.setMaterial(mat);
Node bb = new Node(“billboard”);
BillboardControl control=new BillboardControl();
bb.addControl(control);
bb.attachChild(g);
bb.attachChild(g3);
n=new Node(“parent”);
n.attachChild(g2);
n.attachChild(bb);
rootNode.attachChild(n);
n2=new Node(“parentParent”);
n2.setLocalTranslation(Vector3f.UNIT_X.mult(5));
n2.attachChild(n);
rootNode.attachChild(n2);
}
Node n;
Node n2;
@Override
public void simpleUpdate(float tpf) {
super.simpleUpdate(tpf);
n.rotate(0, tpf, 0);
n.move(0.1f*tpf, 0, 0);
n2.rotate(0, 0, -tpf);
}
public static void main(String[] args) {
TestBillboard app = new TestBillboard();
app.start();
}
}[/java]
I hope that somebody know how to fix it. I’m usin openSUSE 11.4 x86 btw.
I’m gonna check that out thanks
I think I have the solution for that built into SimpleWater, added it when somebody wanted to use the water as a mirror. Atm the Y-up is expected I think in post water too
Fixed in SVN
Thank you for fixing it