Toi qui a déjà bidouillé le code de Sweet Home 3D, je suis étonné que tu n'aies pas vu passer des classes comme
LightSource,
HomeLight ou
CatalogLight. [;)]
En fait, la gestion des lumières est partiellement programmée dans Sweet Home 3D.
Dans les
bibliothèques de meubles, tous les objets qui appartiennent à la catégorie
Luminaires sont en fait mémorisés comme des objets de classe
CatalogLight avec un ou plusieurs objets
LightSource associés, et ce depuis mars 2009 (version 1.7 de Sweet Home 3D et version 1.0.3 des bibliothèques de meubles).
Mais ça ne va pas plus loin pour l'instant. [:(]
J'ai fait quelques essais comme toi avec SunFlow, comme le montre l'image suivante :
où on voit que l'applique murale au fond à gauche et les bougies éclairent la scène.
Pour tous les programmeurs que ça tente de générer des images similaires, la modification à effectuer dans la classe
PhotoRenderer n'est pas compliquée à reproduire. Pour remplacer les lumières calculées au plafond par les sources lumineuses du catalogues, il faut remplacer les
lignes 179 à 218 par le code suivant :
Code: Select all
for (HomePieceOfFurniture piece : home.getFurniture()) {
if (piece instanceof HomeLight) {
for (LightSource lightSource : ((HomeLight)piece).getLightSources()) {
int lightColor = lightSource.getColor();
this.sunflow.parameter("radiance", null,
(lightColor >> 16) * 100,
((lightColor >> 8) & 0xFF) * 100,
(lightColor & 0xFF) * 100);
this.sunflow.parameter("center",
new Point3(piece.getX() - piece.getWidth() / 2
+ (lightSource.getX() * piece.getWidth()),
piece.getElevation()
+ (lightSource.getZ() * piece.getHeight()),
piece.getY() + piece.getDepth() / 2
- (lightSource.getY() * piece.getDepth())));
this.sunflow.parameter("radius", 0.5f);
this.sunflow.parameter("samples", samples);
this.sunflow.light(UUID.randomUUID().toString(), "sphere");
}
}
}
Pourquoi ne pas aller plus loin alors ?
Comme tu le pressens, je suis surtout gêné par la limitation de SunFlow qui ne traite pas la lumière à travers des surfaces transparentes. Pour les vitres, on peut les enlever, mais pour les ampoules il faudrait être capable de les retrouver pour les enlever et pour les abat-jours translucides, on est coincé. Au final, la plupart des lumières du catalogue n'ont aucun effet avec le code précédent à cause de cela... [:(]