Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2443 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++][OpenGL] Comment modéliser une maille ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++][OpenGL] Comment modéliser une maille ?

n°1530483
arki33
Posté le 19-03-2007 à 12:57:34  profilanswer
 

Bonjour à tous et à toutes,
 
Je souhaite dans le cadre d’un projet de robotique, modéliser une maille de nœuds qui seraient reliés les uns aux autres par un lien « ressort, amortisseur ».
En fait le lien n’est pas important pour l’instant, ce que je voudrais, c’est savoir comment partir lorsque l’on souhaite modéliser une maille, afin de partir sur de bonnes bases.
Par exemple, vaut t-‘il mieux utiliser des triangles ou des carrés ou je ne sais quoi ? … comment ça va se passer si je veux rajouter une texture par la suite ? …
 
Je code en c++, qui est un nouveau langage pour moi, mais je pense men sortir de ce coté la. Pour la partie graphique, j’utilise opengl.
Pour ceux qui se posent la question de l’utilité de cette maille : elle servira à représenter la peau humaine (en fait il y aura 5 mailles superposées avec des propriétés différentes), et elle devra réagir en fonction de la force qu’on lui appliquera par l’intermédiaire d’un périphérique haptique.
 
Ne vous inquiétez pas, Je ne souhaite pas une réponse toute faite pour me mâcher le travail, mais plutôt des conseils, ou une sorte de plan pour bien démarrer.
 
Merci d’avance.

mood
Publicité
Posté le 19-03-2007 à 12:57:34  profilanswer
 

n°1530500
red factio​n
Posté le 19-03-2007 à 14:10:49  profilanswer
 

http://freespace.virgin.net/hugo.e [...] string.htm
http://freespace.virgin.net/hugo.e [...] _cloth.htm
 
et si tu est disposé a nous presenter les resultats (et non un merci-> ca marche/aurevoir) je suis pret a t'aider.

n°1530862
arki33
Posté le 20-03-2007 à 03:46:31  profilanswer
 

Salut Red faction, c'est ce genre de lien qu'il me fallait, j'aime le fait de pouvoir attaquer par une simple chaine avant d'enchainer sur la maille.
 
Bien sur je veux bien présenter mes résultats et avancées, mais pour l'instant je pars de zéro ^^
 
J'actualiserai ce topic quand j'aurai un bout de code qui tourne.
 
Merci

n°1530902
_darkalt3_
Proctopathe
Posté le 20-03-2007 à 09:34:48  profilanswer
 

Dans le même genre, en simple:
http://nehe.gamedev.net/data/lesso [...] ?lesson=40
 
(rope physics)


---------------
Töp of the plöp
n°1531361
arki33
Posté le 21-03-2007 à 04:15:48  profilanswer
 

en simple ...
C'est vite dit, en tout cas pas pour moi ;-)
 
Merci en tt cas

n°1531421
_darkalt3_
Proctopathe
Posté le 21-03-2007 à 09:40:06  profilanswer
 

ok, en plus simple alors ;)


Message édité par _darkalt3_ le 21-03-2007 à 09:40:14

---------------
Töp of the plöp
n°1531915
arki33
Posté le 22-03-2007 à 04:35:31  profilanswer
 

En moins compliqué ça correspond encore mieux  :p  
 
Donc j'ai commencé en utilisant le 1er lien de Red Faction pour réaliser une string : [url]http://freespace.virgin.net/hugo.e [...] string.htm[/url].
Seulement il n'y a que l'algorithme et pas le langage c++.
 
Voici ce que j'ai tenté (partie sans la masse pour l'instant) :
 

Code :
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. int main()
  5. {
  6.    // on crée les tableaux et déclare les variables :
  7. double string1_X[32];
  8. double string1_Y[32];
  9. double string2_X[32];
  10. double string2_Y[32];
  11. double X_Vector1 = 0;
  12. double Y_Vector1 = 0;
  13. double X_Vector2 = 0;
  14. double Y_Vector2 = 0;
  15. double Magnitude1 = 0;
  16. double Magnitude2 = 0;
  17. double Extension1 = 0;
  18. double Extension2 = 0;
  19. double xv = 0;
  20. double yv = 0;
  21. double longueur_normale = 1;
  22. double Gravity=0;
  23. // on les initialise :
  24. int i=0;
  25. for (i=0; i<32; i++)
  26. {
  27. string1_X[i]=0;
  28. string1_Y[i]=i;
  29. }
  30. int j=0;
  31. while(j<3)
  32. {
  33. cout << "Boucle n°" << j << ":" << endl;
  34. for (i=0; i<32; i++)
  35.  {
  36.  X_Vector1 = string1_X[i- 1] - string1_X[i];
  37.  Y_Vector1 = string1_Y[i - 1] - string1_Y[i];
  38.         Magnitude1 = sqrt((X_Vector1*X_Vector1) +  (Y_Vector1*Y_Vector1));
  39.         Extension1 = Magnitude1 - longueur_normale;
  40.  cout << "Magnitude 1 :" << Magnitude1 << endl;
  41.  cout << "Extension 1 :" << Extension1 << endl;
  42.         X_Vector2 = string1_X[i + 1] - string1_X[i];
  43.         Y_Vector2 = string1_Y[i + 1] - string1_Y[i];
  44.         Magnitude2 = sqrt((X_Vector2*X_Vector2) +  (Y_Vector2*Y_Vector2));
  45.         Extension2 = Magnitude2 - longueur_normale;
  46.  cout << "Magnitude 2 :" << Magnitude2 << endl;
  47.  cout << "Extension 2 :" << Extension2 << endl;
  48.         xv = (X_Vector1 / Magnitude1 * Extension1) + (X_Vector2 / Magnitude2 * Extension2);
  49.         yv = (Y_Vector1 / Magnitude1 * Extension1) + (Y_Vector2 / Magnitude2 * Extension2) + Gravity;
  50.         string2_X[i] = string1_X[i] + (xv * .01);
  51.         string2_Y[i] = string1_Y[i] + (yv * .01);
  52.   //Ici on peut changer la valeur .01 pour modifier le comportement de la chaine.
  53.   //cout << string2_X[i] << string2_Y[i] << endl;
  54.  }
  55. j++;
  56. for (i=0; i<32; i++)
  57.  {
  58.  string1_X[i]=string2_X[i];
  59.  string1_Y[i]=string2_Y[i];
  60.  }
  61. }
  62. return 0;
  63. }


 
 
évidement ça ne marche pas du premier coup. d'ailleurs on le voit bien dès la deuxième boucle for :

Code :
  1. for (i=0; i<32; i++)

,  
il va y avoir un problème avec :

Code :
  1. X_Vector1 = string1_X[i- 1] - string1_X[i];


puisque string1_X[-1] n'est pas défini.
 
Pourtant dans son algo, c'est bien ce qu'il à écrit, donc je ne comprends pas trop, si quelqu'un peut m'aider ?
 
Merci
 

n°1532137
red factio​n
Posté le 22-03-2007 à 13:05:30  profilanswer
 

Code :
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. class point{
  5. public:
  6. double x,y;
  7. point(){
  8.  x=0;
  9.  y=0;
  10. }
  11. };
  12. class vector{
  13. public:
  14. double x,y;
  15. vector(){
  16.  x=0;
  17.  y=0;
  18. }
  19. vector(double px,double py){
  20.  x=px;
  21.  y=py;
  22. }
  23. vector( point *p1, point *p2){
  24.  x=p1->x-p2->x;
  25.  y=p1->y-p2->y;
  26. }
  27. double getMagnitude(){
  28.  return sqrt((x*x)+(y*y));
  29. }
  30. };
  31. point stringc[32];
  32. void init(){
  33.     int i;
  34.     for (i=0; i<32; i++)
  35. {
  36.         stringc[i].x=0;
  37.         stringc[i].y=i;
  38. }
  39. }
  40. void calc(){
  41.     int i;
  42. point stringtmp[32];
  43. point *pcurr,*pnext,*pprev;
  44.     vector *vec;
  45.     double Magnitude,Extension;
  46.     const double normal_length = 1;
  47.     const double gravity=0;
  48. for (i=0; i<32; i++)
  49. {
  50.  vector vforce;
  51.  pnext=pprev=NULL;
  52.  pcurr=&stringc[i];
  53.  if(i>0)    pprev=&stringc[i-1];
  54.  if(i<31)   pnext=&stringc[i+1];
  55.  if(pprev){
  56.   vec = new vector(pprev,pcurr);
  57.   Magnitude = vec->getMagnitude();
  58.   Extension = Magnitude - normal_length;
  59.   cout << "Magnitude 1 :" << Magnitude << endl;
  60.   cout << "Extension 1 :" << Extension << endl;
  61.   vforce.x+= (vec->x / Magnitude * Extension);
  62.   vforce.y+= (vec->y / Magnitude * Extension);
  63.   delete vec;
  64.  }
  65.  if(pnext){
  66.   vec = new vector(pnext,pcurr);
  67.   Magnitude = vec->getMagnitude();
  68.   Extension = Magnitude - normal_length;
  69.   cout << "Magnitude 2 :" << Magnitude << endl;
  70.   cout << "Extension 2 :" << Extension << endl;
  71.   vforce.x+= (vec->x / Magnitude * Extension);
  72.   vforce.y+= (vec->y / Magnitude * Extension);
  73.   delete vec;
  74.  }
  75.  //apply forces    
  76.  vforce.y+=gravity;
  77.  stringtmp[i].x = stringc[i].x + (vforce.x * .01);
  78.  stringtmp[i].y = stringc[i].y + (vforce.y * .01);
  79.  //Ici on peut changer la valeur .01 pour modifier le comportement de la chaine.
  80.  //cout << string2_X[i] << string2_Y[i] << endl;
  81. }
  82. for (i=0; i<32; i++)
  83. {
  84.  stringc[i].x=stringtmp[i].x; //surdefinir loperateur =
  85.  stringc[i].y=stringtmp[i].y;
  86. }
  87. }
  88. int main()
  89. {
  90. int i;
  91. init();
  92.     for(i=0;i<3;i++)
  93. {
  94.         cout << "Boucle no " << i << ":" << endl;   
  95.  calc();
  96. }
  97.     return 0;
  98. }


Message édité par red faction le 22-03-2007 à 13:08:25

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++][OpenGL] Comment modéliser une maille ?

 

Sujets relatifs
minicarte pour un jeu en OpenGL[OpenGL] Ne pas afficher les faces arrières
OpenGL/3Ds/AllegroGL... !!?[OpenGL] glTexImage2D
pb pour executer un programme openglopengl et objet
[OpenGL] splitter l'ecrandonner des paramètres à CG ( en openGL )
[C++ OpenGL] probleme avec les callback du glutessQuestion sur une manière de modéliser mon problème
Plus de sujets relatifs à : [c++][OpenGL] Comment modéliser une maille ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR