IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Moteur de lumière 2D dynamique


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut Moteur de lumière 2D dynamique
    Bien le bonjour à tous,
    Voilà je n'ai pas l'habitude de posté mes soucis mais comme je débute java depuis 1 semaine j'ai besoin d'avoir des conseils de vétéran du java =)

    Voici un screenshot du rendu du projet en java que je suis en train de réaliser :


    Il s'agit d'un "moteur" de lumière 2D dynamique, j'ai cherché des outils basique pour le faire simplement sur internet mais je n'ai malheureusement rien trouvé, donc j'ai tout refait moi même (sauf le composite car je ne connait pas trop encore).

    Le problème est que le processus est affreusement lent, pour expliquer simplement je me suis basé le pattern decorator sur les tutoriels Java.
    Le code recréé donc à chaque fois tout les images, j'ai fait un BufferedImage pour chaque image mais il reste très lent quand même, je me demande si c'est possible d'allez plus loin dans l'optimisation.

    Je vous offre naturellement mon code source qui ça peut pousser des personnes à mieux comprendre mon soucis majeur :
    http://www.florentdenis.net/ftp/java...-pok-beta3.rar

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 052
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 052
    Par défaut
    Salut,

    Pour info, ton code ne fonctionne pas sous X11/Linux (java 1.6.0_21).
    Exception in thread "AWT-EventQueue-0" java.lang.InternalError: not implemented yet
    at sun.java2d.x11.X11SurfaceData.getRaster(X11SurfaceData.java:186)
    at sun.java2d.loops.Blit$AnyBlit.Blit(Blit.java:144)
    at sun.java2d.pipe.DrawImage.blitSurfaceData(DrawImage.java:927)
    at sun.java2d.pipe.DrawImage.renderImageCopy(DrawImage.java:550)
    at sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:54)
    at sun.java2d.pipe.DrawImage.copyImage(DrawImage.java:982)
    at sun.java2d.pipe.ValidatePipe.copyImage(ValidatePipe.java:168)
    at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:2979)
    at sun.java2d.SunGraphics2D.drawImage(SunGraphics2D.java:2964)
    at com.light.Lampe.paintComponent(Lampe.java:186)
    at com.light.Lumiere.paintComponent(Lumiere.java:50)
    at com.light.Lampe.paintComponent(Lampe.java:71)
    at com.light.Lumiere.paintComponent(Lumiere.java:50)
    at com.light.Lampe.paintComponent(Lampe.java:71)
    at com.light.Lumiere.paintComponent(Lumiere.java:50)
    at com.light.Lampe.paintComponent(Lampe.java:71)
    at com.light.Lumiere.paintComponent(Lumiere.java:50)
    at com.light.Lampe.paintComponent(Lampe.java:71)
    at com.world.Panneau.paintComponent(Panneau.java:126)
    at javax.swing.JComponent.paint(JComponent.java:1029)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:278)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
    at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
    at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

  3. #3
    Membre averti
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut
    Arf désoler je n'ai plus linux sur mon pc malheureusement =( je vais chercher une autre solution alors.
    Merci quand même.

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Quelques petits indices pour accélérer le tout:

    Eviter de créer des BufferedImage à chaque appel à paintComponent: c'est une opération relativement lourde et donc qui te bloque le dessin en lui même.

    Tu devrais chercher à minimiser ce genre d'opérations et surtout à les faire en background autant que possible (c'est à dire dans un thread à part) et ne déclencher de dessin qu'une fois que les images sont disponibles.

    Cf le tuto suivant pour comprendre les tenants et aboutissants du thread de dessin d'AWT/Swing, à savoir l'Event Dispatch Thread (EDT): http://gfx.developpez.com/tutoriel/j...ing-threading/

    Afin de rendre les calculs sur les images plus rapides, il te faut les rendre compatibles avec l'OS hôte de la façon suivante: http://java.developpez.com/faq/gui/?...ompatibleImage
    En effet ces images seront compatibles avec les mécanismes internes de la carte graphique, et donc les opérations apposées dessus seront potentiellement réalisées au niveau hardware.

    Autant que possible éviter de manipuler directement le raster, car là on repasse en accélération software définitivement.


    Sinon une autre idée serait de faire tout ça en OpenGL en passant par JOGL, ce qui sera probablement la solution la plus rapide au niveau perfs.

    Genre ce genre de choses pourrait te mettre sur une piste: http://www.curious-creature.org/2007...ing-with-jogl/

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 911
    Billets dans le blog
    54
    Par défaut
    Si jamais tu restes en Java2D, tu peux trouver des composites supplementaires dans SwingX.
    Celles qu'on trouve habituellement dans les logiciel de dessin : overlay, hardlight, dodge, etc.
    -> http://www.jarvana.com/jarvana/view/...Composite.html

    Voir aussi du cote du code dispo chez JHlabs : http://www.jhlabs.com/ip/filters/index.html

    Attention cependant elles ne fonctionne pas forcement toujours avec tous les modèles de couleur ou s’avérer être lentes a l'usage.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre averti
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Décembre 2009
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Décembre 2009
    Messages : 41
    Par défaut
    Merci beaucoup de vos réponse =D je vais améliorer ça au plus vite !
    Encore merci.

Discussions similaires

  1. Moteur de lumières dynamiques en dimension 2
    Par Gregouar dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 09/03/2019, 19h07
  2. Moteur de recherche avec "select multiple" dynamique AJAX
    Par enclave_51 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/07/2008, 16h21
  3. Moteur de recherche interne sur site dynamique et multi-langues
    Par lucimed dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 30/06/2008, 11h34
  4. Réponses: 1
    Dernier message: 10/03/2008, 15h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo