Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
Désolé, je n'ai pas vu l'info (j'étais le nez dans le code, et je n'ai pas regardé grand chose d'autre ces derniers jours)...
Bon, du coup, il n'y a plus trop d'urgence ; je ferai le ménage dans mes modifications dès que j'ai un moment, et je te ferai directement un patch pour la v2.3.
Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
Bon, j'ai finalement porté mes modifes dans la version 2.3 (elle est cool, cette version !).
Par contre, j'ai dû ajouter 2 fois les boutons supplémentaires : dans PhotoPanel, et dans le nouveau VideoPanel, qui appellent tous deux PhotoRenderer, dont j'ai modifié l'interface.
Du coup :
1) est-il possible de créer un widget global avec tous les petits widgets dont j'ai besoin, widget global que je pourrais ensuite insérer dans les 2 panels, sans dupliquer du code ?
2) je ne vois pas trop comment faire un plugin, puisqu'il s'agit de modifications dans PhotoRenderer. Cela veut donc dire ré-écrire cette classe complète ? Idem pour les Panels... Y a-t-il moyen de sous-classer, et d'ajouter des fonctionnalités ?
----------------------------------------
Frédéric
France
Joined: Nov 7, 2005
Post Count: 9430
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
1) est-il possible de créer un widget global avec tous les petits widgets dont j'ai besoin, widget global que je pourrais ensuite insérer dans les 2 panels, sans dupliquer du code ?
Tu peux organiser ton code comme tu veux, et créer un nouveau type de widget pour le plug-in si tu veux. Mais n'aie pas de scrupule à faire du copier-coller quand c'est pour une fois et pour quelques lignes de code...
2) je ne vois pas trop comment faire un plugin, puisqu'il s'agit de modifications dans PhotoRenderer. Cela veut donc dire ré-écrire cette classe complète ?
Dans les faits, ça consiste à faire en effet un copier-coller de la classe PhotoRender et de modifier ce dont tu as besoin. Je sais bien que ça n'est pas une attitude géniale de programmation, mais je préfère un copier-coller avec des commentaires indiquant tes modifications plutôt de rendre public tous les champs et/ou méthodes au cas où des développeurs comme toi pourraient en avoir besoin (surtout si c'est pour donner accès à une instance d'une classe comme SunflowAPI qui n'est pas un modèle de programmation comme tu as pu le remarquer aussi). Dans mon esprit, une nouvelle API public = une nouvelle API à maintenir. Je suis donc convaincu qu'encapsuler au maximum reste la meilleure stratégie pour maintenir un logiciel sur le long terme.
Cela ne veut pas dire aussi que je ne suis pas prêt à ajouter des options dans PhotoRenderer pour paramètrer les calculs comme tu veux. Mais ajouter par exemple une option ignoreWindowPanes me gêne car j'espère plutôt que SunFlow finisse par être capable de prendre en compte la lumière qui traverse les carreaux d'une fenêtre. Si le développeur de SunFlow n'agit pas, je vais finir par essayer de gérer cela moi-même (j'ai déjà modifié quelques classes de SunFlow pour gérer le multi tâche et corriger un bug).
Pour terminer, le plug-in est bien plus simple à mettre en place : - liberté de livrer une version quand tu veux (pas besoin d'attendre la sortie d'une version de Sweet Home 3D), - liberté d'ajouter des fonctionnalités compliquées qui n'intéressent pas le grand public, - liberté de programmer des bidouilles comme la suppression des carreaux de fenêtres, - pas besoin de traduire en 16 langues les éléments de l'interface utilisateur. J'espère que je t'ai convaincu.
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator
Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
Je pense à un truc : est-ce qu'il ne serait pas intéressant de faire des hooks dans la classe PhotoRenderer (et peut-être dans d'autres) ?
Par exemple, en découpant un peu plus finement les méthodes, il serait alors possible, dans le plugin, de simplement sous-classer PhotoRenderer, et de surcharger la ou les méthodes souhaitées.
Dans la méthode de rendu, il faudrait par exemple appeler plusieurs méthodes, chacune ayant un rôle bien précis (rendu des objets, rendu du soleil, rendu des lumières intérieur, splitter dans des méthodes le cas avec texture pour le ciel, ou pas, etc)...
----------------------------------------
Frédéric
Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
J'ai un soucis : dans beaucoup de cas, le rendu ne se termine pas : un ou deux threads ne finissent pas leur boulot.
Est-ce quelque chose que tu as déjà rencontré, ou est-ce que ça peut être lié à mes modifications ? Je n'avais pas ça, avant...
Sinon, comme c'est toujours à la fin (il manque juste quelques pixels), j'aimerais pouvoir récupérer l'image. Où est-elle stockée, pendant le calcul ?
Ce serait pas mal que le bouton Arrêter conserve l'image calculée jusqu'ici, et autorise la sauvegarde, plutôt que de tout effacer...
----------------------------------------
Frédéric
Quant à permettre de sauvegarder des images partiellement calculées, je préférerais plutôt que le bug soit corrigé dans SunFlow...
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator
Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
Est-ce que ImageIO s'utilise comme BufferedImage ? L'idée serait d'utiliser un type d'image qui est créé sur disque, plutôt qu'en mémoire...
Sinon, j'ai truandé le programme pour qu'il affiche toujours le bouton 'Sauver' ; du coup, je peux même sauver un rendu en cours, et le faire lorsqu'il reste en plan.
Je vais quand même vérifier tous les murs et objets. Merci.
----------------------------------------
Frédéric
Joined: Mar 15, 2010
Post Count: 62
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
Bon, le soucis venait du fait que *tous* les objets du projet étaient en double !
Y'a dû y avoir une merde lors d'une sauvegarde. Comme je n'arrête pas de lancer et stopper SH3D depuis eclipse, quelque fois même en fermant eclipse (erreur de manipe), ce n'est peut-être pas surprenant...
Je trouvais aussi qu'il ramait grave pour générer le rendu ! Normal s'il fallait qu'il calcul tout en double...
----------------------------------------
Frédéric
France
Joined: Nov 7, 2005
Post Count: 9430
Status:
Offline
Re: Écrire un plugin pour simuler l'éclairage de la course du soleil
Ouf ! Me voilà rassuré... Peut-être devrais-je essayer de ne pas prendre en compte les surfaces en double pendant les calculs de SunFlow mais si cette comparaison doit traîter une duplication de tous les objets, ça risque de prendre du temps !
----------------------------------------
Emmanuel Puybaret, Sweet Home 3D creator