Lancement de plusieurs threads pour affichage graphike

cs_artichaud Messages postés 36 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 2 février 2010 - 18 févr. 2004 à 19:38
cs_artichaud Messages postés 36 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 2 février 2010 - 19 févr. 2004 à 11:24
:question)
J'essaye de modifier mon moteur 3D

bon, en gros j'afficher une image, via des morceaux (des triangles) de cette image, pixel par pixel.
Donc, autant passer par des threads. Chaque thread s'occupe de modifier un tableau Px se trouvant dans la classe principale. Une fois ke tous les threads ont terminé (ou ke la boucle sékentielle est terminé), j'utilise une ligne comme
g.drawImage(createImage(new MemoryImageSource(L,H,Px,0,L)),xmin,ymin,L,H,this);
pour pouvoir afficher Px ki représente l'image.

Il faut noter ke mon programme fonctionne en mode sékentiel

Je crée alors autant de thread ke de morceaux via la classe:

class triangle implements Runnable
{
  int patati;
  public void run()
  {patata}
}


Ainsi, dans la classe principale, on a:

public class go extends Applet implements Runnable
{
...
  Thread lesTrianglesAafficher[] = new Thread[nbTriangles];
  triangle lesTriangles[] = new triangle[nbTriangles];
  for(int i=0;i<nbElements;i++)
  {
   lesTriangles[i] = new triangle(blablabla);
   lesTrianglesAafficher[i] = new Thread(lesTriangles[i]);
  }
  repaint();
}


Et donc pour l'exécution, on a dans la classe principale (go):

public void update()
{
  for(int i = 0;i<nbTriangles;i++)
  {
    lesTrianglesAafficher[i].start();
  }
  for(int i = 0;i<nbTriangles;i++)
  {
    try
    {
      lesTrianglesAafficher[i].join();
    }
    catch(InterruptedException e){}
  }
}


Ca devrait être plus rapide, non? Et ben non! c'est beaucoup plus lent et buggé ke si je fais

public void update()
{
  for(int i = 0;i<nbTriangles;i++)
  {
    lesTrianglesAafficher[i].run();
  }
}


c'est à dire en mode sékentiel, run() étant vue comme une fonction standard. J'ai fait une connerie? Est-ce ke les threads ki utilisent les données de la classe principale devraient chacun avoir leur données?

pour accéder aux données de la classe principale , j'ai fait dans la classe principale avant de lancer les threads

lesTriangles[i].donnée1 = donnée1;


donnée1 pouvant être un tableau ou un double, un int...

J'ai essayé de faire des copies de tableaux pour chake thread mais, bien sûr, l'exécution plante par manke de mémoire...

10 réponses

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
18 févr. 2004 à 21:40
:big) Neodante :big)

Wao j'ai pas tout lu mais si tu pouvais m'envoyer un eval de ton truc (compiler si tu veux pas donner les sources !) pour que je vois un peu la concurrence !!!!
@+

[Responsable www.neogamedev.com]
0
cs_artichaud Messages postés 36 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 2 février 2010 1
18 févr. 2004 à 22:27
:clown)

bon euh... on peut pas vraiment dire ke je suis en train de faire un moteur 3D, mais j'ai pour projet d'en faire un plus tard et l'envoyer à CS (avec des commentaires cette fois-ci!)

je suis en train de reprendre une de mes sources pour essayer de l'améliorer. Je l'avais déjà envoyée à CS il y a kelkes temps (intitulée 'une terre ki tourne (3D)')
tu trouveras la source en cours à
http://www.ifrance.com/modizzy/terre_version_thread.zip</code> ca pèse 500ko passke ya une mamage ki pèse un peu.

Le programme est une applet exécutable via index.html dans compilation!. Pour l'instant il tourne sans moulti-thread.
il y a un petit passage en commentaire ki, normalement -sic- si on le passe en lignes de code, le programme doit alors tourner en moulti-thread, c'est à dire plus rapidement. Mais hélas, oh malheur! kel désespoire!, ca ne marche po du tout. Mais alors po du tout du tout.

Voila. Alors si tu comprends mon problème, ce serait super sympa de me dire ce ki va pa. Parceke je vois pa du tout, malgré les lectures du sujet ke j'ai pu faire.

Malheureusement pour toi, d'après les kelkes messages ke j'ai lus de toi, ce n'est pas du java3D. Et, si tu ne t'es pas plongé dans un boukin de math, ça doit te sembler être du parfait charabia! Un peu comme moi kan j'essaye de comprendre les fonctionnalités de java3D! bordel! Je ne dois pas être le seul et c'est pour koi l'envie me prend de faire un moteur en putain de francess!
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
18 févr. 2004 à 22:31
:big) Neodante :big)

Pas de problème du côté maths car j'écris moi même pas mal de moteur 3D dont un pour mobile J2ME en ce moment ... pour ma boîte !!! A ^côté je suis en train de réaliser un DoomLike en pure Java et ça avance pas mal, je mettrais mon projet sur Cs et/ou SourceForge lorsqu'il sera fini du moins la version 1.0 !
Java3D il faut juste se plonger un peu dedans ensuite ça marche tout seul .... avec beaucoup de temps et de nuit blanches !
@+

[Responsable www.neogamedev.com]
0
cs_artichaud Messages postés 36 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 2 février 2010 1
18 févr. 2004 à 23:01
:) yenakondlachansse
pour tout dire, java3d ne me chauffe pa
comme on m'a appris à faire des maths, je préferre faire mon moteur pour mes travaux (mailleurs, simulations) et ainsi écrire mes programmes en français. je dois être un tout petit peu chauvin sur les bords. Peut-être existe-t-il des programmes ainsi faits, mais je ne suis pas tombé dessus et, à vrai dire, maintenant ke je suis lancé...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
18 févr. 2004 à 23:03
:big) Neodante :big)

Yétekomprend !!!
@+ et bonne continuation !

[Responsable www.neogamedev.com]
0
cs_artichaud Messages postés 36 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 2 février 2010 1
18 févr. 2004 à 23:10
:question) tu n'aurais pas un prog sous le coude où il y aurait un affichage graphike (genre animation) moulti-thread?
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
18 févr. 2004 à 23:13
:big) Neodante :big)

Non pas sur moi tout de suite, je n'ai que ma clé USB et les postes de l'école regorge plus de merde que de sources utiles (je suis en alternance ...)!!!!
@+

[Responsable www.neogamedev.com]
0
cs_artichaud Messages postés 36 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 2 février 2010 1
19 févr. 2004 à 00:22
:-p dis moi, c peut-être là où ca pêche, mais a-t-on le droit de modifier un tableau commun à tous les tâches?
Je me demande si en effet le pointeur d'un tableau peut-être partout à la fois, ce ki serait en effet gênant dans le cas du moulti-tâche d'écriture d'un même tableau. Mais il doit être possible d'avoir un pointeur par tâche, non? Enfin, j'espère ke la gestion des moulti-tâches s'en occupe automatikement! On n'est pas en C++, mince! :-p
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
19 févr. 2004 à 10:01
:big) Neodante :big)

En tout cas moi je ne ferais pas tant de Thread pour un moteur 3D ... c'est juste un conseil ... même OpenGL et DX traite tout en séquentiel selon le pipeline que tu peux trouver sur le site officiel www.opengl.org !
@+

[Responsable www.neogamedev.com]
0
cs_artichaud Messages postés 36 Date d'inscription vendredi 25 juillet 2003 Statut Membre Dernière intervention 2 février 2010 1
19 févr. 2004 à 11:24
:)
en gros, on ne peut pas lancer des milliers de tâches en même temps. Le moulti-tâche sert plutôt à, par exemple, la repésentation graphique, la gestion des collisions, le son... kant on peut arriver à les gérer en même temps

bon, ben j'aurais essayé!
0
Rejoignez-nous