I am using Thomas' Game sample and his JPCT extentions (Both are Great Help ! Thanks for open sourcing them !!! ) for creating a world with a cuboid and a plane surface which is having a spotlight.
I really know nothing about shaders, but at the same time trying/eager to have some basic shadowsmapping in my work .
What I did -
1. On My Oncreate Method I loaded custom shaders .
ZipInputStream zis = new ZipInputStream(res.openRawResource(R.raw.data));
ZipEntry ze;
try {
while ((ze = zis.getNextEntry()) != null) {
BLABLA....
ShaderProvider.setShader(ze.getName(), sb.toString());
}
zis.closeEntry();
zis.close();
BLABLAh....
2. On my OnSrfacechanged...
shadowHelper = new cz.chladek.jpct.extension.ShadowProjector();
world.getLightController().setShadowHelper(shadowHelper);
3.Ondrawfrme::..
shadowHelper.update(world, fb);
4. Removed world.renderScene(fb);
world.draw(fb);
fb.display();
This from my ondrawframe.
Also THis is what in the update method..............
public void update(World world, FrameBuffer fb) {
if (light != null) {
if (!setted) {
Enumeration<Object3D> objects = world.getObjects();
while (objects.hasMoreElements()) {
Object3D object = objects.nextElement();
if (!object.getName().startsWith("particle")) {
PolygonManager pm = object.getPolygonManager();
int maxID = pm.getMaxPolygonID();
for (int i = 0; i < maxID; i++)
pm.addTexture(i, textureID, TextureInfo.MODE_MODULATE);
}
}
projectionMatrix = projector.getProjectionMatrix(fb, nearPlane, farPlane);
setted = true;
}
updateProjector();
Camera originalCam = world.getCamera();
world.setCameraTo(projector);
fb.setRenderTarget(shadowTexture, 1, 1, 1, 1, true);
fb.clear(RGBColor.WHITE);
Tools.renderWithShader(world, fb, depthShader);
fb.display();
fb.removeRenderTarget();
world.setCameraTo(originalCam);
}
}
And Tools.renderwithshader......................
public static void renderWithShader(World world, FrameBuffer fb, GLSLShader shader) {
Enumeration<Object3D> objects = world.getObjects();
while (objects.hasMoreElements()) {
Object3D obj = (Object3D) objects.nextElement();
if (obj.getVisibility()) {
GLSLShader objShader = obj.getShader();
shaders.add(objShader);
obj.setShader(shader);
}
}
world.renderScene(fb);
world.draw(fb);
objects = world.getObjects();
int i = 0;
while (objects.hasMoreElements()) {
Object3D obj = (Object3D) objects.nextElement();
if (obj.getVisibility()) {
GLSLShader objShader = shaders.get(i);
obj.setShader(objShader);
i++;
}
}
shaders.clear();
}
**********************************************************************
___ Result was a blank black screen .___...I also used this
shadowHelper.blitShadowMap(fb, halfW - 64, fb.getHeight() - size - 10, size);
to blit the shadowTexture ... but it is also blank white blit .
Then I did many funny experiments with different laughable results but none produced the desired results.
also my log o/p is full of this-
02-27 10:59:17.330: I/jPCT-AE(7147): Additional visibility list (106) created with size: 512
02-27 10:59:17.350: I/jPCT-AE(7147): Additional visibility list (107) created with size: 512
..........