Ok, thanks for your answer.
I think I'll finally add some polygons as you suggested.
I've made a simple workaround which works fine in my case : the 4 small textures actually cover a slightly bigger area than a quarter of the orignal texture, so as the UVs won't be outside [0,1] range.
It looks basically like this :
float reductionPercent; // example : 0.9f if the original image has been reduced at 90% to solve side effects (and then cut into 4)
float ratio = 2 * reductionPercent;
float margin = 1 - ratio/2;
[...]
for(int i=0; i<nbTriangles; i++) {
// read polygon UV :
SimpleVector uv1 = polygonMgr.getTextureUV(i, 0);
SimpleVector uv2 = polygonMgr.getTextureUV(i, 1);
SimpleVector uv3 = polygonMgr.getTextureUV(i, 2);
u1 = uv1.x;
v1 = uv1.y;
u2 = uv2.x;
v2 = uv2.y;
u3 = uv3.x;
v3 = uv3.y;
boolean west = u1 < 0.5;
boolean south = v1 < 0.5;
if(west) {
u1bis = u1 * ratio;
u2bis = u2 * ratio;
u3bis = u3 * ratio;
}
else {
u1bis = (u1 - 0.5f) * ratio + margin;
u2bis = (u2 - 0.5f) * ratio + margin;
u3bis = (u3 - 0.5f) * ratio + margin;
}
if(south) {
v1bis = v1 * ratio;
v2bis = v2 * ratio;
v3bis = v3 * ratio;
}
else {
v1bis = (v1 - 0.5f) * ratio + margin;
v2bis = (v2 - 0.5f) * ratio + margin;
v3bis = (v3 - 0.5f) * ratio + margin;
}
if(west && south) texID = textureID1;
else if(west && !south) texID = textureID2;
else if(!west && south) texID = textureID3;
else if(!west && !south) texID = textureID4;
polygonMgr.setPolygonTexture(i, new TextureInfo(texID, u1bis, v1bis, u2bis, v2bis, u3bis, v3bis));
}
This can only be used with 2x2 textures (not NxN), but is usefull to bypass texture maximum size on terrain (epecially on Android...)