|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
Sujet : Texture d'une glutSphere [ Archives / OpenGL ] (Dante41)
Informations & options pour cette discussion
mercredi 6 octobre 2004 à 20:22:19 |
Texture d'une glutSphere

Dante41
|
Salut à tous, J'ai besoin de votre aide. j'essaie de recréer le système solaire en OpenGL par conséquent , il faut que je fasse toutes les planètes avec leurs textures... Voici mon bout de code qui marche pas je vous explique le problème après : ---------------------- void draw() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity (); gluLookAt(0,4,-13,1,0,0,0,1,0); glRotatef(60,0.0f,1.0f,0.0f); planete_terre(); SDL_GL_SwapBuffers(); } void planete_terre() { glBegin(GL_QUADS); glBindTexture(GL_TEXTURE_2D,texture_terre); glutSolidSphere(1.20, 40, 20); glEnd(); } --------------------- La texture est correctement appliquée mais y'a un problème : elle ne suit pas la sphere lors des rotations... Là j'ai vraiment besoin de vous pour savoir comment faire une sphere texturée qui suit tout... Merci d'avance à vous ! Dante41 (ou Vengeur41 ca dépend de l'humeur)"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck
|
|
|
jeudi 7 octobre 2004 à 14:30:47 |
Re : Texture d'une glutSphere

steve_clamage
|
Bonjours,
D'abord il est tres important de comprendre que OpenGL fonctionne par "etat", chaque commande OpenGL permet de modifier/initialiser l'etat ou le sous etat (matrice) en cours.
Dans la fonction de rendu (draw), glLoadIdentity() initialise la matrice courante en chargeant la matrice identité, puis le glRotat effectue une transformation sur cette matrice, qui est une rotation de 60 degrés selon l'axe y du repere OpenGL. Il n'y a donc aucun changement a attendre d'un rendu à l'autre, aucune rotation relative.
Ce n'est pas que la texture ne tourne pas, c'est juste qu'il n'y a aucune rotation ! D'ailleur la texture ne peut pas rester fixe independamment de la sphere car ses coordonnées d'attache ont été générées en phase d'initialisation !
Pour observer une rotation de la sphere selon l'axe y, il faut la tourner differement à chaque rendu ou moins, à l'aide d'un timer par exemple, incrementer ou decrementer l'angle de rotation en fonction d'un temps donné lors de chaque appel de la fonction draw.
De plus dans la fonction planete_terre, les commandes glBegin et glEnd sont inutiles, glutSolidSphere se charge du rendu de la sphere de maniere tres optimisé. On peut dans ce cas se passer de cette fonction qui allourdie le code inutilement.
void draw() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity (); gluLookAt(0,4,-13,1,0,0,0,1,0);
/* la valeur de angle doit changer au cours du temps */ glRotatef(angle,0.0f,1.0f,0.0f);
glBindTexture(GL_TEXTURE_2D,texture_terre); glutSolidSphere(1.20, 40, 20);
SDL_GL_SwapBuffers(); }
|
|
|
jeudi 7 octobre 2004 à 14:34:14 |
Re : Texture d'une glutSphere

steve_clamage
|
J'ajoute que l'appel de glBindTexture lors de chaque rendu est inutile et affecte les performances si il n'y a qu'une seule texture selectionnée au cours du rendu.
|
|
|
jeudi 7 octobre 2004 à 18:41:19 |
Re : Texture d'une glutSphere

Dante41
|
Sisi , la sphere tourne sans la texture j'ai fait un test avec l'appui du clavier, on voit les contours de la sphere bouger mais pas la texture... Le code que tu m'as donné améliore donc les performances mais ne change rien à mon problème , dsl...
Dante41 (ou Vengeur41 ca dépend de l'humeur)
"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck
|
|
|
jeudi 7 octobre 2004 à 19:32:06 |
Re : Texture d'une glutSphere

steve_clamage
|
Je ne sais pas ce qu'implique l'evenement "l'appui du clavier" sur le rendu, mais c'est impossible que la sphere tourne et pas la texture (ce que j'ai expliqué pour les coordonnées).
Le meilleur moyen de verifier est de passer en mode "fil de fer"
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
mais ca ne fais aucun doute
Le code que j'ai donné fonctionne tres bien à condition que la valeur de angle soit modifiée par un timer ou un autre evenement.
|
|
|
jeudi 7 octobre 2004 à 20:09:17 |
Re : Texture d'une glutSphere

Dante41
|
La texture reste immobile cependant y'a =quelques pixels qui bougent : les contours de la sphere....
Dante41 (ou Vengeur41 ca dépend de l'humeur)
"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck
|
|
|
vendredi 8 octobre 2004 à 14:15:49 |
Re : Texture d'une glutSphere

steve_clamage
|
Je concois que c'est assez troublant, je vois d'ailleur pas à quoi cela pourrait etre du (à part une rotation, effectivement) mais ce code ne mais pas en rotation la sphere.
Qu'est ce que cela donne avec cette commande ?
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
|
|
|
vendredi 8 octobre 2004 à 18:02:56 |
Re : Texture d'une glutSphere

Dante41
|
Bien sur, ce code ne la met pas en rotation mais j'ai une version modifiée non postée ici qui la fait tourner... Et ca ne marche pas non plus (merci de ton aide ;) ) Dante41 (ou Vengeur41 ca dépend de l'humeur)
"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck
|
|
|
vendredi 8 octobre 2004 à 18:58:35 |
Re : Texture d'une glutSphere

steve_clamage
|
Montre moi donc le code complet, je te la ferais tourner !
|
|
|
vendredi 8 octobre 2004 à 19:03:29 |
Re : Texture d'une glutSphere

Dante41
|
--------main.cpp----------- #include <windows.h> #include <SDL/SDL.h> #include <stdlib.h> #include <stdarg.h> #include <gl/gl.h> #include <gl/glu.h> #include <gl/glut.h> #include "util.h" #include "init.h"
//Surface Ecran SDL_Surface *Screen; //variable pour gerer le quit bool noquit=true; //Concerne les textures GLuint texture_terre; //Rotation float r; //Fonction principale int main( int narg,char *arg[] ) { SDL_Init(SDL_INIT_VIDEO); SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY+100, SDL_DEFAULT_REPEAT_INTERVAL+50); Screen = SDL_SetVideoMode(800,600,32,SDL_OPENGL); SDL_WM_SetCaption("Systeme Solaire [Vengeur/Dante41]", NULL); perspective(); initall(); loadtexture(); //Boucle du programme while (noquit) { draw(); events(); } SDL_Quit(); }
void draw() { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity (); gluLookAt(0,4,-13,1,0,0,0,1,0);
/* la valeur de angle doit changer au cours du temps */ glRotatef(r,0.0f,1.0f,0.0f);
glBindTexture(GL_TEXTURE_2D,texture_terre); glutSolidSphere(2.5, 40, 20);
SDL_GL_SwapBuffers(); } //Fonction de gestion d'evenements void events() { SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: noquit=false; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE: noquit=false; break; case SDLK_UP: r-=10; break; case SDLK_DOWN: r+=10; break; } } } } -------------util.h------------- //Charge une texture a partir d'un bmp bool loadBMP(char* nomFichier, GLuint& idTexture) { SDL_Surface* surfaceTexture = NULL;
surfaceTexture = SDL_LoadBMP(nomFichier); if (!surfaceTexture) { SDL_Quit(); ::MessageBox(::GetForegroundWindow(), "La texture n'a pas pu être chargée", "Erreur SDL_LoadBMP", MB_ICONERROR | MB_OK); exit(1); }
glGenTextures(1, &idTexture);
glBindTexture(GL_TEXTURE_2D, idTexture); glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); glTexGenf(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGenf(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glTexImage2D(GL_TEXTURE_2D, 0, 3, surfaceTexture->w, surfaceTexture->h, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, surfaceTexture->pixels);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, surfaceTexture->w, surfaceTexture->h, GL_BGR_EXT, GL_UNSIGNED_BYTE, surfaceTexture->pixels); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,GL_REPLACE);
if (surfaceTexture) SDL_FreeSurface(surfaceTexture);
return true; } ------------init.h----------- //Init.h Fonctions d'initialisation et déclaration des prototypes //Récupère les id de textures extern GLuint texture_terre; //Prototypes des fonctions void perspective(); void draw(); void events(); bool loadBMP(char* nomFichier, GLuint& idTexture); void loadtexture(); //Fonction d'initialisation de la perspective void perspective() { glViewport(0,0,800,600); glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); glEnable (GL_DEPTH_TEST); glEnable (GL_COLOR_MATERIAL); glEnable (GL_TEXTURE_2D); glMatrixMode(GL_PROJECTION); gluPerspective (45.0f,(GLfloat)800/(GLfloat)600,0.1f,100.0f); glMatrixMode (GL_MODELVIEW); //Plus joli avec ca glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,1); //Correction de perspective sur les textures glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); } //Fonction de chargement des textures void loadtexture() { loadBMP("terre.bmp", texture_terre); }
---- Compilé sous Dev-C++ 4.9.8.0 avec SDL 1.2 et OpenGL sans problèmes...
Dante41 (ou Vengeur41 ca dépend de l'humeur)
"Un myope qui lit sur les lèvres entend mieux lorsqu'il porte des lunettes",Phillipe Geluck
|
|
|
Cette discussion est classé dans : gl, texture, 0f, terre, glutsphere
Répondre à ce message
Sujets en rapport avec ce message
Probleme d'alpha avec SDL_ttf [ par vladisback ]
Je suis entrain de m'arracher les cheuveux avec SDL_ttf, j'essai simplement d'afficher du texte de n'importe quelle couleur opaque sur un fond transpa
PB POUR LA GESTION MULTIFENETRES [ par algeros ]
Voici un code :////////////////////////////////////////////////////////////////// // Name:
Texture transparente [ par F0ra ]
Bonjour,Je voudrais aff
transparence en OpenGl [ par F0ra ]
Bonjour, J'ai un problème en OpenGl Je voudrais rendre uniquement la couleur rose<
Problème de placage de texture [ par unrealgun ]
Bonjour,Je suis en train de développer uGUI en C++ sous linux avec SDL et OpenGL.Voila mon probleme : je charge une image PNG transparente avec SDL_Im
[OpenGL] rotation [ par F0ra ]
Bonjour,J'ai un problème pour réaliser une rotation en OpenGL au centre du rectangle.J'ai esayé avec glRotatef(ang,0.0,0.0,1.0); le problème l'origni
Texture avec OpenGl [ par Zakata ]
Bonjour,Voila j'ai un petit soucis avec les textures et OpenGl. J'ai dans l'espoir de réussir à mettre une image de fond sur une fenetre OpenGl. J'ai
[Débutant][OpenGL ES] Problème affichage textures [ par Niicoo ]
Bonjour tout le monde,Je dois faire un jeu en OpenGL ES (Objective-c) pour IPhone.Je dois afficher une texture sur un carré (2D). Ça pas de soucis, j'
Probleme sur une forme simple [ par faucheuse ]
Tout d'abord je ne travaille pas sous Linux mais sous WindowsXP mais je n'ai pas trouver de sous-forum correspondant dsl.Alors voila, j'essaye de fair
[opengl] texture avec une couleur transparente [ par lafouine1986 ]
Bonjour à toutes et tous,voilà je me permets de vous demander de l'aide car je suis comme bloqué...Je désire créer un opengl un arbre de type imposteu
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|