Bonjour,
Le problème rencontré, est que lorsque je dessine un carré texturé à l'écran, celui-ci est blanc. J'ai donc un problème au niveau du texturage.
Seulement voila, j'utilise exactement le même code et la même texture que pour un prédédent projet qui lui marche correctement, donc la je ne comprend plus tout.
Par contre, j'ai remarqué que "glGenTextures (1, & background);" me renvoie le nombre "3131961357" alors qu'il devrait renvoyer 1 comme identifiant de texture.
La seule différence avec le nouveau projet, c'est que la texture est stockée dans une classe qui elle même est stocké dans une autre classe, je ne sais pas si sa a quelque chose à voir...
Pour info la hierarchie des classe est la suivante :
Classe Engine -> Classe Game -> Classe Level -> Classe Background
Le constructeur de Level créé une instance background contenant la texture en question et la charge.
Voici quelques parties du code :
Initialisation :
La classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 //Initialisation de SDL if(SDL_Init(SDL_INIT_VIDEO)!=0) { cerr << "Probleme pour initialiser SDL :" << SDL_GetError() << endl; return EXIT_FAILURE; } SDL_WM_SetCaption(GAME_TITLE, NULL); //Donne un titre à la fenêtre SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1); //Travail en double buffering screen = SDL_SetVideoMode(RESOLUTION_X, RESOLUTION_Y, 0, SDL_OPENGL); //Création de la fenêtre if(screen==NULL) { cerr << "Probleme pour initialiser la fenetre SDL" << endl; return EXIT_FAILURE; } //Initialisation d'OpenGL avec une vue 2d classique glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, RESOLUTION_X, RESOLUTION_Y, 0);
La méthode
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class cBackground { private : GLuint Tex_FrontPlan; //Texture du 1er plan //GLuint Tex_BackPlan; //Texture du 2eme plan public : cBackground(); //Constructeur ~cBackground(); //Destructeur void LoadBackground(string sFrontPlan, string sBackPlan); //Charge les textures du background void DrawBackground(); //Dessine le background };
Lappelle de la méthode LoadBackground
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void cBackground::LoadBackground(string sFrontPlan, string sBackPlan) { ////////On charge la texture du 1er plan///////////// SDL_Surface *temp; //Paramétrage de la texture OpenGL glGenTextures (1, & Tex_FrontPlan); //Attribue un nom de texture non utilisé glBindTexture (GL_TEXTURE_2D, Tex_FrontPlan); //création de la texture //Paramétrage du filtrage de la texture. glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //Chargement avec SDL de la texture dans la variable temporaire temp = IMG_Load(sFrontPlan.c_str()); if(temp==NULL) { std::cerr << "Erreur dans le chargement de l'image FrontPlan de cBackground" << std::endl; exit(2); } //Jonction entre OpenGL et SDL. glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, temp->w, temp->h, 0, GL_RGB, GL_UNSIGNED_BYTE, temp-> pixels); //Libération de la texture SDL temporaire SDL_FreeSurface(temp); }
L'affichage
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 cLevel::cLevel(int Level) { //Chemin d'accés des textures du background string sFrontPlan = "Medias/Backgrounds_textures/Background.png"; string sBackPlan = "Medias/Backgrounds_textures/Background2.png"; Background = new cBackground(); Background->LoadBackground(sFrontPlan, sBackPlan); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 void cBackground::DrawBackground() { //On applique la texture du 2nd plan glBindTexture (GL_TEXTURE_2D, Tex_FrontPlan); //Et on la dessine glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glTexCoord2i (0, 0) ; glVertex2i(0,0); glTexCoord2i (0, 1) ; glVertex2i(0,300); glTexCoord2i (1, 1) ; glVertex2i(300,300); glTexCoord2i (1, 0) ; glVertex2i(300,0); glEnd(); glDisable(GL_TEXTURE_2D);
Partager