colorer une carte geographique creé par openGL C++

colorer une carte geographique creé par openGL C++ - C++ - Programmation

Marsh Posté le 30-10-2011 à 07:19:56    

bonsoir
j'ai dessiner la carte geographique de mon pays avec openGL sous visualstudion10
j'ai utilisé principalement les fonctions suivantes :
celle ci pour les courbes :
 
 
Code C++ :
 
   

Code :
  1. glEnable(GL_MAP1_VERTEX_3);
  2.     GLfloat ctrlpoints[4][3] =
  3.     {{ 406, 19, 0.0}, { 413, 17, 0.0},
  4.     { 418, 13, 0.0}, { 422, 13, 0.0}};
  5.     glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, &ctrlpoints[0][0]);
  6.     glBegin(GL_LINE_STRIP);
  7.     int n = 60 ;
  8.     for (int i = 0; i <= n; i++)
  9.         glEvalCoord1f((GLfloat) i/((float)n));
  10.     glEnd();


 
 
 
et celle ci pour les droites
 
 
   

Code :
  1. glBegin(GL_LINES);
  2.     glVertex2f( 406, 19);
  3.     glVertex2f( 385,77);
  4.     glEnd();


 
 
 
et ca marché
alors je veux colorer la carte,
pour par la suite faire una animation avec
mais puisqu'elle n'est pas un polygome ou triangle ou ...
je sais pas comment
sachant que les courbes et les droites sont attaché et fermé
 
si vous avez une idéé
 
merci

Reply

Marsh Posté le 30-10-2011 à 07:19:56   

Reply

Marsh Posté le 30-10-2011 à 12:47:44    

je veux colorer la surface interieur de la carte ca veut dire la surface entouré par ces courbes et droites
 
merci

Reply

Marsh Posté le 30-10-2011 à 17:47:14    

Pour remplir le contenu d'une surface en opengl, il faut créer des éléments acceptant des textures ( ex : triangle ou quadrilatère ).  
 
Il faut donc que tu construises ta figure géométrique à partir de triangles ou quad , et que tu appliques ensuite la texture dessus.
 
 
ex pour faire un quadrilatère  
 

Code :
  1. glBegin( GL_QUADS );
  2. glTexCoord2f( u0, v0 ); glVertex3f( x0, y0, 0.0f );
  3. glTexCoord2f( u0, v1 ); glVertex3f( x0, y1, 0.0f );
  4. glTexCoord2f( u1, v0 ); glVertex3f( x1, y0, 0.0f );
  5. glEnd();


 
( remplace les coordonnées par les tiennes )
glVertex3f permet de définir les coordonnées de ta forme, et glTexCoord2f permet de définir comment tu appliques la texture sur ton quad.
 
Ne pas oublier que ce ne sont pas les coordonnées dans la scène, mais les coordonnées propres à ton objet. Il te faut ensuite appliquer des matrices de transformations ( projection / homothétie / rotation ) pour placer ton objet dans la scène.
 
Ensuite, en ce qui concerne la texture, regarde du coté des fonctions :
 - glGenTextures  
 - glBindTexture
 - glTexImage2D
 
Il est peut etre possible de remplir une surface sans passer par une texture, mais je ne connais pas bien opengl, en tout cas, avec une texture, ca marchera forcement ( tu peux faire une texture 16x16 de la couleur que tu veux et l'appliquer en mode TILE )
 
 

Reply

Marsh Posté le 31-10-2011 à 15:46:36    

merci pour votre reponse
 

Citation :

Pour remplir le contenu d'une surface en opengl, il faut créer des éléments acceptant des textures ( ex : triangle ou quadrilatère ).  
 
Il faut donc que tu construises ta figure géométrique à partir de triangles ou quad , et que tu appliques ensuite la texture dessus.
 


mais la carte que j'ai dessiner contient des courbes (j'ai dessiner les courbes avec le morceau de code en haut (bezier)  
 
et en utilisant triangle et ... je peux pas faire des courbes
 
alors que faire  
 
merci

Reply

Marsh Posté le 31-10-2011 à 19:42:36    

générer une surface à partir du contour doit être un problème retourné dans tous les sens.
J'imagine que tu dois pouvoir trouver de la littérature à ce sujet, peut-être en cherchant de la génération de surface à partir d'un nuage de point (et tu échantillonnes toi-même tes courbes de bézier)


---------------
last.fm
Reply

Marsh Posté le 31-10-2011 à 20:50:51    

j'ai pas compris ce que tu veux dire

Reply

Marsh Posté le 31-10-2011 à 22:56:24    

Ce que tu cheches à faire, c'est trianguler un polygone concave.
 
en faisant une recherche sur la triangulation de polygones concaves grâce à notre ami google tu pourras trouver en premier résultat une discussion où quelqu'un finit par donner son code pour le faire (et il file même le header avec)
 
Pour pouvoir te servir de ce que ce type a fait, vu qu'il ne traite pas de courbes de bézier, il faudra que tu convertisse tes courbes en points. Ca se fait simplement en échantillonnant tes courbes.
 
Tu te débrouilles pour stockerle résultat en vertex buffer + index buffer. Tu fais un rendu des triangles résultants avec la glColor qui va bien et ca devrait faire le job.


---------------
last.fm
Reply

Marsh Posté le 31-10-2011 à 23:31:24    

si c'est en 2D, peut-il utiliser un algo de remplissage du même style que le pot de peinture sous paint?


---------------
Seul Google le sait...
Reply

Marsh Posté le 31-10-2011 à 23:42:55    

breizhbugs a écrit :

si c'est en 2D, peut-il utiliser un algo de remplissage du même style que le pot de peinture sous paint?


Pour des questions de facilité d'adaptation à un changement de résolution, c'est plus sympa de faire des triangles, mais oui, dans l'absolu, ca pourrait très bien être fait avec un simple algo de remplissage.


---------------
last.fm
Reply

Marsh Posté le 01-11-2011 à 01:17:23    

merci pour les indications et les orientations
je viens de savoir qu'il me reste beaucoup de travail a faire, vu que je suis debutant dans le graphisme
l'idée de breizhbugs, ca a l'air plus simple meme si elle est d'aprés theshockwave moins performante
pouvez vous me donnez qlq idée domment l'implementer
 
 
merci

Reply

Marsh Posté le 01-11-2011 à 01:17:23   

Reply

Marsh Posté le 01-11-2011 à 10:56:30    

il y a http://fr.wikipedia.org/wiki/Algor [...] _diffusion


---------------
Seul Google le sait...
Reply

Sujets relatifs:

Leave a Replay

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