SimpleWater understanding problem

Hey,



first of all sorry for asking all these questions, im complete new to game programming and do not have much experience with java.



So here is my problem, on my Root node i’ve attached a sky

[java]

sky = SkyFactory.createSky(this.app.getAssetManager(), west, east, north, south, up, down);

this.app.getRootNode().attachChild(sky);

[/java]

and a generated Mesh Map

[java]

map = new Mesh();

//…

mapgeom = new Geometry(“Map”, map);

//…

this.app.getRootNode().attachChild(mapgeom);

[/java]



then im creating the Water

[java]

private void createWater() {



//create processor

SimpleWaterProcessor waterProcessor = new SimpleWaterProcessor(app.getAssetManager());

waterProcessor.setReflectionScene(mapgeom);

waterProcessor.setDebug(true);

app.getViewPort().addProcessor(waterProcessor);

waterProcessor.setLightPosition(new Vector3f(-.5f,-.5f,-.5f));



//create water quad

//waterPlane = waterProcessor.createWaterGeometry(100, 100);

Spatial waterPlane=(Spatial) app.getAssetManager().loadAsset(“Models/WaterTest/WaterTest.mesh.xml”);

waterPlane.setMaterial(waterProcessor.getMaterial());



waterPlane.setLocalScale(50);

waterPlane.setLocalTranslation(-5, +0.25f, 5);

waterPlane.setShadowMode(ShadowMode.Receive);



//lower render size for higher performance

waterProcessor.setRenderSize(128,128);

//raise depth to see through water

waterProcessor.setWaterDepth(40);

//lower the distortion scale if the waves appear too strong

waterProcessor.setDistortionScale(0.1f);

//lower the speed of the waves if they are too fast

waterProcessor.setWaveSpeed(0.005f);



app.getRootNode().attachChild(waterPlane);

}

[/java]



whenn adding mapgeom i cant see trough the water, the surface is black but the reflection works





same happens when adding the sky:





I thought maybe its because i have to add sky AND mapgeom to the reflection.

[java]

Node lol = new Node(“Szene”);

lol.attachChild(sky);

lol.attachChild(mapgeom);

//…

waterProcessor.setReflectionScene(lol);

[/java]



but this is resulting in this error:



Mrz 07, 2012 4:09:15 PM com.jme3.app.Application handleError

SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]

java.lang.IllegalStateException: Scene graph is not properly updated for rendering.

State was changed after rootNode.updateGeometricState() call.

Make sure you do not modify the scene from another thread!

Problem spatial name: Szene

at com.jme3.scene.Spatial.checkCulling(Spatial.java:241)

at com.jme3.renderer.RenderManager.renderScene(RenderManager.java:776)

at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1117)

at com.jme3.water.SimpleWaterProcessor.postQueue(SimpleWaterProcessor.java:230)

at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1122)

at com.jme3.renderer.RenderManager.render(RenderManager.java:1168)

at com.jme3.app.SimpleApplication.update(SimpleApplication.java:246)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:149)

at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:182)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:223)

at java.lang.Thread.run(Thread.java:722)





How do i add sky and mapgeom to the reflectionScene?

How do i make the water transparent?

@drollian

Do what you did last. Attach sky and mapgeom to szene, and use szene for reflectionScene, but also attach szene to the rootnode. If it is not added to rootnode when you start rendering you’ll get that error.