Okay I tried and yes it does project the marker on all object, but it looses some of the textures on the objects.
In my Demo project I lost the roof texture and only the marker came up, and it shows the marker on both object at the same time
I tried adjusting markerProjector.setFOV(0.3f); and the limits to get a better image, but it still streches it sides to width of the objects...
public void setMarker(String markerTextureName) {
Enumeration e = tm.getNames();
Map<Integer, TextureInfo> textureMap = new TreeMap<Integer, TextureInfo>();
int maxID, textureIndex;
PolygonManager manager;
tm.getTexture(markerTextureName).setEnabled(true);
tm.getTexture(markerTextureName).setProjector(markerProjector, true);
while (e.hasMoreElements()) {
String textureName = e.nextElement().toString();
if (textureName.equals(markerTextureName)) {
continue;
}
TextureInfo info = new TextureInfo(tm.getTextureID(textureName));
info.add(tm.getTextureID(markerTextureName), TextureInfo.MODE_ADD);
textureMap.put(tm.getTextureID(textureName), info);
}
Collection<Object3D> models = model3DManager.getModels();
for (Object3D md : models) {
if (md != skyModel) {
manager = md.getPolygonManager();
maxID = manager.getMaxPolygonID();
for (int idx = 0; idx < maxID; idx++) {
textureIndex = manager.getPolygonTexture(idx);
manager.setPolygonTexture(idx, textureMap.get(textureIndex));
}
}
}
}
// I allso tried to match the UV of the existing texture
public void setMarker(String markerTextureName) {
Map<Integer, TextureInfo> textureMap = new TreeMap<Integer, TextureInfo>();
int maxID, textureIndex;
PolygonManager manager;
TextureInfo info;
tm.getTexture(markerTextureName).setEnabled(true);
tm.getTexture(markerTextureName).setProjector(markerProjector, true);
Collection<Object3D> models = model3DManager.getModels();
for (Object3D md : models) {
if (md != skyModel) {
manager = md.getPolygonManager();
maxID = manager.getMaxPolygonID();
for (int idx = 0; idx < maxID; idx++) {
textureIndex = manager.getPolygonTexture(idx);
info = new TextureInfo(textureIndex);
SimpleVector uv1 = manager.getTextureUV(idx, 0);
SimpleVector uv2 = manager.getTextureUV(idx, 1);
SimpleVector uv3 = manager.getTextureUV(idx, 2);
info.add(tm.getTextureID(markerTextureName),uv1.x,uv1.y,uv2.x,uv2.y,uv3.x,uv3.y,TextureInfo.MODE_ADD);
manager.setPolygonTexture(idx, info);
}
}
}
}