All Done and it works really well.
I have 64 32*32 sub textures in a single 256*256 texture.
selecting the depth sets up the correct texture based on depth.
I have put the code up as an idiots guide of how to change a texture on an object that has already been built.
You must do this first before you compile. (retexture method from advanced example modified)
PolygonManager pm = obj.getPolygonManager();
int t2Id = TextureManager.getInstance().getTextureID(t2);
int end = pm.getMaxPolygonID();
Logger.log(end + "num of polygons");
int t1 = pm.getPolygonTexture(0);
for (int i = 0; i < end; i++) {
uv0 = new SimpleVector(0, 0, 0);
uv1 = new SimpleVector(0, SUBTEXTURE, 0);
uv2 = new SimpleVector(SUBTEXTURE, 0, 0);
ti = new TextureInfo(t1, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y);
ti.add(t2Id, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y, TextureInfo.MODE_REPLACE);
pm.setPolygonTexture(i++, ti);
uv0 = new SimpleVector(0, SUBTEXTURE, 0);
uv1 = new SimpleVector(SUBTEXTURE, SUBTEXTURE, 0);
uv2 = new SimpleVector(SUBTEXTURE, 0, 0);
ti = new TextureInfo(t1, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y);
ti.add(t2Id, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y, TextureInfo.MODE_REPLACE);
pm.setPolygonTexture(i, ti);
then in your vertex controller
if (polyindex < maxPolygonID) {
textureIndexX = VesselRenderer.SUBTEXTURE * (int) ((depth * 2) % 8);
textureIndexY = VesselRenderer.SUBTEXTURE * (int) ((depth * 2) / 8);
uv0 = new SimpleVector(textureIndexX, textureIndexY, 0);
uv1 = new SimpleVector(textureIndexX,
textureIndexY + VesselRenderer.INTERNALSUBTEXTURE, 0);
uv2 = new SimpleVector(textureIndexX + VesselRenderer.INTERNALSUBTEXTURE,
textureIndexY, 0);
ti = new TextureInfo(t1, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y);
ti.add(t1, uv0.x, uv0.y, uv1.x, uv1.y, uv2.x, uv2.y, TextureInfo.MODE_REPLACE);
pm.setPolygonTexture(polyindex++, ti);
uv0 = new SimpleVector(textureIndexX + VesselRenderer.INTERNALSUBTEXTURE, textureIndexY
+ VesselRenderer.INTERNALSUBTEXTURE, 0);
ti = new TextureInfo(t1, uv1.x, uv1.y, uv0.x, uv0.y, uv2.x, uv2.y);
ti.add(t1, uv1.x, uv1.y, uv0.x, uv0.y, uv2.x, uv2.y, TextureInfo.MODE_REPLACE);
pm.setPolygonTexture(polyindex++, ti);
}
initialise using these methods
obj.calcNormals();
// make sure to attach the controller before calling build() or otherwise, the object will be
// compiled to static geometry and won't reflect any changes to the mesh.
obj.getMesh().setVertexController(m_channelController, false);
obj.compile(true, false);
obj.build();