OpenGl et extruder un polygone

OpenGl et extruder un polygone - Divers - Programmation

Marsh Posté le 28-04-2008 à 17:25:56    

Bonjour,
 
J'ai creer un polygone a partir d'une multitude de point (x,y,Z) sachant que les Z ont tous la meme valeur pour un polygone donne. et je voudrais extruder ce polygone jusqu'a z=0 mais je n'ai pas trouver de maniere simple
pour l'instant la seule chose que j'ai trouve c'est dessiner le dessus puis le dessous et ensuite chaque cote !
je trouve cette methode un peu barbare et super longue.
il n'y a pas d'autres moyen ?
 
merci
sylvain

Reply

Marsh Posté le 28-04-2008 à 17:25:56   

Reply

Marsh Posté le 28-04-2008 à 17:46:27    

Salut,
 

lordankou a écrit :

pour l'instant la seule chose que j'ai trouve c'est dessiner le dessus puis le dessous et ensuite chaque cote !
je trouve cette methode un peu barbare et super longue.


C'est à dire?
 
De façon générale (et pour autant que je sache bien sûr :)) :  
1. Pour chaque sommet accompagné de sa normale unitaire N, tu en crées un autre en décalant ses coordonnées de N * longueur de l'extrusion
2. Ensuite, tu génères les faces pour modeler les "côtés", et éventuellement le dessus selon que tu veuilles un objet bouché ou pas
 
Mais j'ai du mal à comprendre ton post et savoir si c'est ce que tu fais déjà?

Reply

Marsh Posté le 28-04-2008 à 17:55:36    

oui c'est ce que je fais mais du coup ca ralenti beaucoup le systeme a chaque fois que j'effectue une rotation, deplacement et qu'il doit tout recalculer  :(
 
je pensais peut etre qu'il existait une fonction pour extruder directement en openGl

Reply

Marsh Posté le 28-04-2008 à 18:01:44    

Pourquoi il doit tout recalculer?? Faut stocker le résultat et appliquer les modifs sur l'objet résultant, pas tout refaire en permanence (je dis pas qu'il n'y a pas des cas où c'est nécessaire, m'enfin, ça me paraît douteux :D)

Reply

Marsh Posté le 28-04-2008 à 18:02:33    

tu générès la géométrie obtenue dans un cache.
l'extrusion est un traitement unique, tu n'as pas le refaire frame par frame.
 
oups grilled  :o


Message édité par bjone le 28-04-2008 à 18:03:09
Reply

Marsh Posté le 28-04-2008 à 18:22:01    

disons que je j'effectue des mouvement lateraux autour de mon objet (le deplacer a gauche, a droite) donc je suis bien oblige de redessiner mes surfaces a chaques fois ?  :??:

Reply

Marsh Posté le 28-04-2008 à 18:38:11    

redessiner oui, recalculer na

Reply

Marsh Posté le 28-04-2008 à 18:49:51    

et c'est quoi la difference car la franchement plus je regarde de tuto et plus ca se contredit dans tous les sens.
pour moi quand je dis redessiner c'est par exemple :

Code :
  1. glBegin(GL_POLYGON);
  2. // for all point
  3. for(vector<point*>::iterator m = (*l)->getListPoint().begin(); m != (*l)->getListPoint().end();++m){
  4.  glVertex3f((*m)->getX(),(*m)->getY(),(*m)->getZ());
  5. }
  6. // end polygone
  7. glEnd();

Reply

Marsh Posté le 28-04-2008 à 18:56:07    

Bah ouais, c'est ça grosso modo (et de façon brute aussi); où est le recalcul de l'extrusion dont tu parles là-dedans?

Message cité 1 fois
Message édité par IrmatDen le 28-04-2008 à 18:56:27
Reply

Marsh Posté le 28-04-2008 à 19:04:50    

lordankou a écrit :

disons que je j'effectue des mouvement lateraux autour de mon objet (le deplacer a gauche, a droite) donc je suis bien oblige de redessiner mes surfaces a chaques fois ?  :??:


 
c'est la matrice qui déplace l'objet.
(mais sinon il faut appeller les commandes de l'api pour traçer l'objet)


Message édité par bjone le 28-04-2008 à 19:05:56
Reply

Marsh Posté le 28-04-2008 à 19:04:50   

Reply

Marsh Posté le 28-04-2008 à 19:18:53    

IrmatDen a écrit :

Bah ouais, c'est ça grosso modo (et de façon brute aussi); où est le recalcul de l'extrusion dont tu parles là-dedans?


 
oui j'ai confondu calcul et dessin sur le coup (c'est la fin de la journee aussi)
 
 
mais d'un point de vue technique a partir de quand on est cense voir des ralentissement dans une scene affichee ? (nbr de polygone affichee par exemple ?)

Reply

Marsh Posté le 28-04-2008 à 19:57:22    

avec des glVertex3f(), tout de suite.
 
commence a regarde les VBO + Index buffer
http://www.g-truc.net/article/vbo-fr.pdf
(premier lien gargle)


Message édité par bjone le 28-04-2008 à 20:03:21
Reply

Marsh Posté le 28-04-2008 à 20:07:53    

je vais pas y aller par 4 chemins :  
est ce que ça vaut le coup les VBO sachant que la rapidité n'est pas non plus quelque choses de super important ?  
 
je souhaite juste afficher une carte en 3D avec mes comtés extrudés et dans ce sens est ce que les VBO sont intéressants (notamment vu le temps que ça risque de me prendre pour l'implémenter) ?

Reply

Marsh Posté le 28-04-2008 à 20:12:45    

sans VBO, les performances (géométriques) sont indexées sur le CPU et non le GPU.
 
entre du poussage de vertex contenu dans un std::vector<> et la copie du std::vector<> dans un VBO une fois toutes les 36 du mois, en ligne de code ça peut être la même chose.


Message édité par bjone le 28-04-2008 à 20:31:30
Reply

Marsh Posté le 28-04-2008 à 20:26:35    

bon bah j'ai de la lecture pour ce soir  :love:  
 
merci pour l'aide je vais voir ce que je dois modifier dans mes classes ou juste prendre les donnes pour les copier. enfin bref je vais etudier ca de pres !

Reply

Marsh Posté le 29-04-2008 à 11:45:36    

apres une bonne nuit J'ai deux trois questions (je sais je suis chiant !)
j'ai rapidement lu l'article sur les vbo qui est assez technique pour moi et en meme temps j'en ai profite pour lire les display list.
 
et pour l'instant en fait je dessine une par une chaque vertice de mes polygones en parcourant donc tous les points.
 
solutions qui n'est pas tres interessant car au final une fois la carte affichee je ne vais pas modifier les points mais juste effectuer des rotations autour par exemple.
 
donc dans ce cadre la les display listes sont beaucoup plus interessantes non ? (plutot que de lire chaque point un par un et de tracer mon polygone apres)
 
je suis desole pour toutes ces question mais je n'ai qu'un temps limite pour faire l'appli et je n'y connais rien a la 3D et pas beaucoup en c++

Reply

Marsh Posté le 29-04-2008 à 12:36:56    

les display list sont une approche plus ancienne.
le max de perfs que tu obtiendras sera en VBO+index buffer, en respectant les types "accélérés".  
un VBO avec des types malchoisis pour le hard peut être contre-performant. (donc rester avec des floats la pluspart du temps l'opengl part un peu dans tous les sens au niveau types, enfin c'est pas vraiment un problème)
 
balade toi sur le site de nvidia et d'ati, y'a pas mal de docs pour connaitre les bonnes pratiques (modernes, économe en cpu, et maximisant les perfs gpus)
 
http://developer.nvidia.com/object/using_VBOs.html


Message édité par bjone le 29-04-2008 à 12:53:23
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed