J'ai enlevé le coeur de mon code est il y a toujours les mêmes erreurs :s
Pourtant les includes sont dans le bonne ordre :s
Je ne comprends pas d'ou ça vient ...
Version imprimable
J'ai enlevé le coeur de mon code est il y a toujours les mêmes erreurs :s
Pourtant les includes sont dans le bonne ordre :s
Je ne comprends pas d'ou ça vient ...
Je maintient l'idée de l'ordre des includes?
Sinon, ça vient d'ou le ClearColour() ?
Impossible de trouver ce que c'est :s
J'ai enlevé le coeur de mon code pour bien voir si les erreurs persistent qu'elles viennent du fichier et non de mon code.
Il y avait toujours les erreurs et je ne sais pas du tout à quoi s'est dû :
Erreur 1 error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'ClearColour' c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 33 Ex1
Erreur 2 error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 33 Ex1
Erreur 3 error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 33 Ex1
Avertissement 4 warning C4183: 'ClearColour'*: type de retour manquant*; fonction membre retournant 'int' prise par défaut c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 33 Ex1
Erreur 5 error C2061: erreur de syntaxe*: identificateur 'ILvoid' c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 40 Ex1
Erreur 6 error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'Bind' c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 44 Ex1
Erreur 7 error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 44 Ex1
Erreur 8 error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque*: C++ ne prend pas en charge int par défaut c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 44 Ex1
Avertissement 9 warning C4183: 'Bind'*: type de retour manquant*; fonction membre retournant 'int' prise par défaut c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 44 Ex1
Erreur 10 error C2146: erreur de syntaxe*: absence de ';' avant l'identificateur 'Bind' c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\il\il_wrap.h 45 Ex1
Que des erreurs de ce genre dans le fichier il_wrap.h :s
Voila un extrait du code du fichier en question ou aux lignes ou sont recensés ces erreurs :
ILvoid ClearColour(ILclampf, ILclampf, ILclampf, ILclampf);
ILboolean Convert(ILenum);
ILboolean Copy(ILuint);
ILboolean Default(void);
ILboolean Flip(void);
ILboolean SwapColours(void);
ILboolean Resize(ILuint, ILuint, ILuint);
ILboolean TexImage(ILuint, ILuint, ILuint, ILubyte, ILenum, ILenum, ILvoid*);
// Image handling
ILvoid Bind(void) const;
ILvoid Bind(ILuint);
ILvoid Close(void) { this->Delete(); }
ILvoid Delete(void);
ILvoid iGenBind();
ILenum PaletteAlphaIndex();
...
Si jamais vous avez des idées ... ;)
Merci à vous !
Je dois vous faire une remarque. Sur ce forum ( hautement perfectionné ) il y a des balises,
[ Q U O T E ] et [ / Q U O T E ] ainsi que [ C O D E ] et [ / C O D E ] ( le tout sans espaces, bien entendu ).
La première permet de faire des citations ( pratique pour les messages d'erreur entre autre ), la deuxième, c'est pour mettre le code, avec une coloration syntaxique sublime ( vive les couleurs ).
Maintenant, je suis toujours convaincu que le problème vient de l'ordre des include.
Voici un ordre que je qualifirai de bon ( même si je n'ai pas testé ):
Les autres je crois que ce n'est pas utile de les mettre.Code:
1
2
3
4 #include "IL/il.h" #include "IL/ilu.h" #include "IL/ilut.h"
Oui désolé pour les balises :s c'est vrai qu'après c'est plus agréable à lire :)
Pour l'ordre des includes, les 3 que vous avez cité était bien dans le bon ordre mais je crois que c'était la présence des autres .h que j'ai inclus également qui entrainaient des erreurs (j'ai laissé juste les 3 avec ce même ordre et plus d'erreurs concernant ce problème :) ).
Cependant, j'ai une dernière erreur concernant mon fichier .jpg je crois :
Pourtant, le chemin absolu de mon repertoire "data" est :Citation:
Erreur 1 error C2664: 'ilutGLLoadImage'*: impossible de convertir le paramètre 1 de 'const char [18]' en 'wchar_t *' c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 70 Ex1
C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Debug\data
(avec les fichiers .dll (ILU.dll par exemple)),
Et dans mon code, j'écris bien :
(mon fichier étant nommé texture1.JPG).Code:Texture = ilutGLLoadImage("data/texture1.jpg");
Avez-vous une idée ?
Merci encore :)
Oui j'ai idée:
Ceci en ajoutant le 'L' peut être une solution ( je ne suis pas sur ).Code:
1
2 Texture = ilutGLLoadImage(L"data/texture1.jpg");
Cela permet de dire à WIndows que c'est des caractères en wide char ... codé sur 2 octets au lieu de 1 ( comme le ANSI )
Bref, cela permet d'accepter les caractères spéciaux (étrangers) tel que ceux en chinois, arabe ...
Sinon, on peut aussi résoudre ce problème dans les options du projet, la première page qui s'affiche, et dans une entrée qui s'appelle "Encodage des caractères" ... et faut faire des essais, car je ne me rappelle plus de ce qu'il faut mettre.
Alors, j'ai rajouté le "L" avant le nom du fichier et l'erreur a bien disparu ! :)
Maintenant, je n'ai plus d'erreur mais malheureusement quand j'éxecute, je vois un cube (sa c'est normal) mais ce cube disparait après 1 seconde (même pas) et je n'ai même pas le temps de voir si la texture a bien été appliquée :s
Mon code est tout simple pourtant :
Je vais peut être finir par y arriver avec votre aide :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 GLuint Texture; ilInit(); ilutEnable(ILUT_OPENGL_CONV); ilutRenderer(ILUT_OPENGL); Texture = ilutGLLoadImage(L"data/texture1.jpg"); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Texture); glTranslatef(0.0f,0.0f,-4.0f); glBegin(GL_QUADS); glTexCoord2i(1,0);glVertex3f(-1,-1,0); glTexCoord2i(0,0);glVertex3f(1,-1,0); glTexCoord2i(0,1);glVertex3f(1,1,0); glTexCoord2i(1,1);glVertex3f(-1,1,0); glEnd();
Merci encore !
J'espère bien qu'avec mon aide vous allez y arriver :p
Puis je voir votre code source en entier, quelque chose m'étonne :D
Oui désolé il faut d'abord garder un espace pour la texture j'ai inversé des lignes :s
Donc il vaut mieux écrire :
Mais toujours le même problème à l'exécution :sCode:
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 display ( void ) // Create The Display Function { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear de la Couleur et de la profondeur. ILuint Texture; ilInit(); ilutEnable(ILUT_OPENGL_CONV); ilutRenderer(ILUT_OPENGL); glEnable(GL_TEXTURE_2D); glGenTextures(1, &Texture); glBindTexture(GL_TEXTURE_2D, Texture); Texture = ilutGLLoadImage(L"data/texture1.jpg"); glTranslatef(0.0f,0.0f,-4.0f); glBegin(GL_QUADS); glTexCoord2i(1,0);glVertex3f(-1,-1,0); glTexCoord2i(0,0);glVertex3f(1,-1,0); glTexCoord2i(0,1);glVertex3f(1,1,0); glTexCoord2i(1,1);glVertex3f(-1,1,0); glEnd(); glEnable(GL_BLEND); glutSwapBuffers ( ); // buffer de travail. }
Premier problème:
il n'est pas bon de faire le chargement de la texture à chaque affichage.
Deuxième problème, vous ne décharger pas ( libération mémoire ) la texture après utilisation ... Un jour cela va faire freezer le pc.
A la fin, c'est pas trop utile.Code:
1
2 glEnable(GL_BLEND);
Ceci applique un déplacement, mais comme vous n'avez pas de glLoadIdentity() après le clear de l'écran, le déplacement va s'ajouter à chaque frame ( du coup, vous n'allez plus voir l'objet ). Voilà votre bug.Code:
1
2 glTranslatef(0.0f,0.0f,-4.0f);
Mais vous devez nettoyez votre code aussi :aie:
Aller, c'est la dernière étape ;)
Merci encore LittleWhite !
--> Alors, pour le glTranslatef() oui en effet j'avais oublié le glLoadIdentity() pour effacer les transformations matricielles :p
--> Pour cette ligne de code :
En fait je n'ai pas vraiment compris ce que cela faisait reelement ...Code:glEnable(GL_BLEND);
Pour dire la vérité, je me suis contenté de copier coller après des recherches cette ligne de code :s (je sais c'est mal :p)
--> Aussi, pour la texture, je dois déplacer tout le code suivant non (afin qu'il ne soit pas réinitialisé à chaque fois) :
Par contre, si je ne le met pas dans la fonction display(), ou pui-je mettre ce code ?Code:
1
2
3
4
5
6
7
8
9
10
11
12 ILuint Texture; ilInit(); ilutEnable(ILUT_OPENGL_CONV); ilutRenderer(ILUT_OPENGL); glEnable(GL_TEXTURE_2D); glGenTextures(1, &Texture); glBindTexture(GL_TEXTURE_2D, Texture); Texture = ilutGLLoadImage(L"data/texture1.jpg");
--> Enfin, pour décharger la texture, qu'elle est la ligne de code à utiliser ?
Désolé de poser tant de questions mais je débute en openGL et tout n'est pas encore très claire :s
Merci encore pour votre aide ! :) je sens que ça va finir par marcher :p
(Juste en rajoutant un glLoadIdentity() avant la translation, j'ai un carré tout blanc pour le moment).
Alors, après avoir "bidouillé" un peu, j'ai mis le code ci-dessus dans la fonction "void init () " et la déclaration "ILuint Texture; " en dehors de toutes fonctions au début du programme (avec les "#include").Ma fonction display() se résume alors à :
Mais lors de l'exécution, le carré est toujours blanc :sCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void display ( void ) // Create The Display Function { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear de la Couleur et de la profondeur. glLoadIdentity(); glTranslatef(0.0f,0.0f,-4.0f); glBegin(GL_QUADS); glTexCoord2i(1,0);glVertex3f(-1,-1,0); glTexCoord2i(0,0);glVertex3f(1,-1,0); glTexCoord2i(0,1);glVertex3f(1,1,0); glTexCoord2i(1,1);glVertex3f(-1,1,0); glEnd(); glutSwapBuffers ( ); // buffer de travail. }
Malheureusement je n'ai pas avancé depuis le dernier message :s
Un dernier petit coup de main ? ;)
Merci d'avance !
Dans une fonction d'initialisation, qui est appelé au début du programme ( après la création de la fenêtre ).Citation:
Par contre, si je ne le met pas dans la fonction display(), ou pui-je mettre ce code ?
ILUTGLfreeImage() ? ... non je n'en sais rien, faut regarder la doc ;)Citation:
--> Enfin, pour décharger la texture, qu'elle est la ligne de code à utiliser ?
Ne manque t'il pas le glBind(); glUnbind respectivement avant et après le dessin du carre?
Sinon pour les debutant, c'est nehe -> http://nehe.developpez.com/ ( tuto 6 sur les textures ;) )
-> Concernant le chargement de texture, j'ai mis le code dans la fonction "init()" :
Et j'ai déclaréCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void init () { glShadeModel(GL_SMOOTH); // ou FLAT glClearColor(0.01f, 0.01f, 0.01f, 0.5f); // Background glClearDepth(1.0f); // Depth Buffer Setup glEnable(GL_DEPTH_TEST); // Enables Depth Testing glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //glEnable(GL_LIGHTING); // pour la lumière //glEnable(GL_LIGHT0); // Light0 pour la première lumière. glEnable(GL_BLEND); ilInit(); ilutEnable(ILUT_OPENGL_CONV); ilutRenderer(ILUT_OPENGL); glEnable(GL_TEXTURE_2D); glGenTextures(1, &Texture); glBindTexture(GL_TEXTURE_2D, Texture); Texture = ilutGLLoadImage(L"data/texture1.jpg"); }
Au début du programme avant les fonctions.Code:
1
2
3
4 #include "IL/il.h" #include "IL/ilu.h" #include "IL/ilut.h" ILuint Texture;
Maintenant du coup, dans la fonction "display()", il reste :
-> Après le problème, c'est que je ne sais pas ou mettre la fonction "unbind()" pour décharger la texture.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 void display ( void ) // Create The Display Function { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear de la Couleur et de la profondeur. // Remise à "zero" de la matrice glLoadIdentity(); glBegin(GL_QUADS); glTexCoord2i(1,0);glVertex3f(-1,-1,1); glTexCoord2i(0,0);glVertex3f(1,-1,1); glTexCoord2i(0,1);glVertex3f(1,1,1); glTexCoord2i(1,1);glVertex3f(-1,1,1); glutSwapBuffers ( ); // buffer de travail. }
-> PS : Je fais aussi les tuto sur le site de Nehe mais malheureusement le tuto sur les textures est pas terrible à mon goût. Il explique plus comment charger à travers une fonction soit-même son image...
Si vous avez plus d'informations n'hésitez pas à m'aider :p
(j'ai toujours le carré blanc)
Merci !
Je pense avoir plein d'idée pour des textures blanches.
Déjà, le code de dessin:
En temps normal je taperai sur les doigts pour la variable globale.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 void display ( void ) // Create The Display Function { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear de la Couleur et de la profondeur. // Remise à "zero" de la matrice glLoadIdentity(); glBind(GL_TEXTURE_2D, Texture); // Indique à OpenGL que l'on selectionne la texture pour les travaux suivants glBegin(GL_QUADS); glTexCoord2i(1,0);glVertex3f(-1,-1,1); glTexCoord2i(0,0);glVertex3f(1,-1,1); glTexCoord2i(0,1);glVertex3f(1,1,1); glTexCoord2i(1,1);glVertex3f(-1,1,1); glEnd(); // Trop important, sinon des ralentissements énorme, et pas trop d'image correct glBind(GL_TEXTURE_2D, 0); // C'est le unbind ( ou bind avec 0 :D ), on n'utilise plus de texture, car plus besoin glutSwapBuffers ( ); // buffer de travail. }
Je tape sur les doigts, pour les oublie de glEnd();
Dans la fonction de libération, il faut appeler au minimum:
Ça devrait marcher beaucoup mieux, maintenant que j'ai donné les informations sur la fonction d'affichage :DCode:
1
2 glDeleteTextures(1, &Texture);
Merci LittleWhite.
Oui j'ai enfin réussi à le faire marcher ! :p
Merci beaucoup pour ton aide ! c'était pas gagné :p
\o/
:bravo:
Content pour vous :)