Accueil > Forum > > > > Texture d'une glutSphere
Texture d'une glutSphere
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ée 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
OpenGL et textures [ par Jackyzgood ]
Bonjour à tous ! Maintenant que je commence à être à l'aise en SDL, je me suis dis : ça pourrait être bien de passer à l'OpenGL. J'ai suivis un tuto
Offscreen texture rendering to bitmap [ par S3rialHoOK3rs ]
Bonjour, J'essaie de créer un rendu hors écran au sein de mon application OpenGL. Pour ce faire, je stock mon rendu offscreen dans une texture que je
Tableaux dynamiques GLuint [sous windows] [ par Djoss666 ]
Bonjour à tous. Je cherche à charger le nom des textures que je récupère dans un fichier, dans un tableau dynamique GLUint, afin de ne pas avoir à re
Livres en rapport
|
Derniers Blogs
[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|