I have included in my code all the necessary stuff, from TestShadowPass.java, to get shadow casting in my scene, but the result is that i get no shadow casts. As you see in the image, sphere doesn’t cast a shadow on the box mesh (at least it is not visible).
Here are some parts of my code:
public void simpleSetup()
{
display.setMinStencilBits( 8 );
/** shadowing */
shadowPass.add(rootNode);
shadowPass.addOccluder(rootNode); //every node casts a shadow
shadowPass.setRenderShadows(true);
shadowPass.setEnabled(true);
shadowPass.setRenderVolume(true);
shadowPass.setLightingMethod(ShadowedRenderPass.ADDITIVE);
passManager = new BasicPassManager();
passManager.add(shadowPass);
RenderPass rPass = new RenderPass();
rPass.add(fpsNode);
passManager.add(rPass);
shadowPass.doRender(renderer);
ShadowedRenderPass.blended.setSrcFunction(2);
ShadowedRenderPass.blended.setDstFunction(1);
ShadowedRenderPass.blendTex.setSrcFunction(2);
ShadowedRenderPass.blendTex.setDstFunction(0);
lightState = renderer.createLightState();
lightState.setTwoSidedLighting(true);
lightState.setEnabled(true);
directionalLight = new DirectionalLight();
directionalLight.setDiffuse(new ColorRGBA(1, 1, 1, 1.0f));
directionalLight.setAmbient(new ColorRGBA(1, 1, 1, 1.0f));
directionalLight.setSpecular(new ColorRGBA(1, 1, 1, 1.0f));
directionalLight.setDirection(new Vector3f(0, -1f, -0.5f).normalizeLocal());
directionalLight.setShadowCaster(true);
directionalLight.setEnabled(true);
lightState.detachAll();
lightState.attach(directionalLight);
rootNode.setRenderState(lightState);
shadeState = renderer.createShadeState();
shadeState.setShade(ShadeState.SM_SMOOTH);
shadeState.setEnabled(true);
rootNode.setRenderState(shadeState);
TextureState ts = renderer.createTextureState();
Texture texture = TextureManager.loadTexture("textures/wood_tex.png", Texture.MM_LINEAR, Texture.FM_LINEAR);
texture.setWrap(Texture.WM_WRAP_S_WRAP_T);
ts.setTexture(texture);
rootNode.setRenderState(ts);
/** an alphaState is needed for transparency effect */
alphaState = renderer.createAlphaState();
alphaState.setBlendEnabled(true);
alphaState.setSrcFunction(AlphaState.SB_SRC_ALPHA);
alphaState.setDstFunction(AlphaState.SB_ONE_MINUS_SRC_ALPHA);
alphaState.setTestEnabled(true);
alphaState.setTestFunction(AlphaState.TF_GREATER);
alphaState.setEnabled(true);
rootNode.setRenderState(alphaState);
rootNode.setRenderQueueMode(Renderer.QUEUE_TRANSPARENT);
}
public void simpleUpdate()
{
...
rootNode.updateRenderState();
passManager.updatePasses(tpf);
}
public void simpleRender()
{
passManager.renderPasses(renderer);
}
Do i miss something?