IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Texture sur un objet 3D (openGL+glut)


Sujet :

OpenGL

  1. #1
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut Texture sur un objet 3D (openGL+glut)
    Bonjour tout le monde,

    Je suis débutant en openGL et je suis en train d'apprendre les textures via le site suivant: "http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06"

    Malheureusement, j'ai du mal à y comprendre le code.

    Entre temps j'ai trouvé un autre site en français qui donne le code suivant :


    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
     
     GLubyte Texture[16] =
    {
    0,0,0,0, 0xFF,0xFF,0xFF,0xFF,
    0xFF,0xFF,0xFF,0xFF, 0,0,0,0
    };
     //Image (2x2) 
    GLuint Nom; 
     
    void InitGL() 
    {  
     glClearColor(.5,.5,.5,0); //Change la couleur du fond 
    glEnable(GL_DEPTH_TEST); //Active le depth test 
    glEnable(GL_TEXTURE_2D); //Active le texturing 
    glGenTextures(1,&Nom); //Génère un n° de texture 
    glBindTexture(GL_TEXTURE_2D,Nom); //Sélectionne ce n° 
    glTexImage2D ( 
     GL_TEXTURE_2D, //Type : texture 2D 
    0, //Mipmap : aucun 
    4, //Couleurs : 4 
    2, //Largeur : 2 
    2, //Hauteur : 2 
    0, //Largeur du bord : 0 
    GL_RGBA, //Format : RGBA 
    GL_UNSIGNED_BYTE, //Type des couleurs 
    Texture  //Addresse de l'image 
    );  
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    }

    Cette partie est bien détaillée alors je comprends assez bien à part peut être le GLubyte Texture[16] et ce qu'il renvoie.
    Après, on applique la texture à un objet 3D comme tel :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
     
    void Draw() 
    {  
     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); //Efface le framebuffer et le depthbuffer 
    glMatrixMode(GL_MODELVIEW); //Un petit gluLookAt()... 
    glLoadIdentity(); 
    gluLookAt(3,2,3,0,0,0,0,1,0); 
    glBegin(GL_QUADS); //Et c'est parti pour le cube ! 
    glTexCoord2i(0,0);glVertex3i(-1,-1,-1);
    glTexCoord2i(1,0);glVertex3i(+1,-1,-1);
    glTexCoord2i(1,1);glVertex3i(+1,+1,-1); 
    glTexCoord2i(0,1);glVertex3i(-1,+1,-1);
     //1 face 
    glTexCoord2i(0,0);glVertex3i(-1,-1,+1);
    glTexCoord2i(1,0);glVertex3i(+1,-1,+1); 
    glTexCoord2i(1,1);glVertex3i(+1,+1,+1); 
    glTexCoord2i(0,1);glVertex3i(-1,+1,+1); 
     //2 faces 
    glTexCoord2i(0,0);glVertex3i(+1,-1,-1); 
    glTexCoord2i(1,0);glVertex3i(+1,-1,+1);
    glTexCoord2i(1,1);glVertex3i(+1,+1,+1);
    glTexCoord2i(0,1);glVertex3i(+1,+1,-1);
     //3 faces 
    glTexCoord2i(0,0);glVertex3i(-1,-1,-1); 
    glTexCoord2i(1,0);glVertex3i(-1,-1,+1); 
    glTexCoord2i(1,1);glVertex3i(-1,+1,+1);
    glTexCoord2i(0,1);glVertex3i(-1,+1,-1); 
     //4 faces 
    glTexCoord2i(1,0);glVertex3i(-1,+1,-1); 
    glTexCoord2i(1,1);glVertex3i(+1,+1,-1); 
    glTexCoord2i(0,1);glVertex3i(+1,+1,+1);
    glTexCoord2i(0,0);glVertex3i(-1,+1,+1);
     //5 faces 
    glTexCoord2i(1,0);glVertex3i(-1,-1,+1); 
    glTexCoord2i(1,1);glVertex3i(+1,-1,+1);
    glTexCoord2i(0,1);glVertex3i(+1,-1,-1);
    glTexCoord2i(0,0);glVertex3i(-1,-1,-1);
     //6 faces 
    glEnd();  
    SwapBuffers(DC); //glutSwapBuffers(); pour GLUT 
    glutPostRedisplay(); //Uniquement pour GLUT


    Ici, je ne comprends pas le gluLookAt et ses paramètres.

    Et puis, ici, la personne créée elle-même son image en échéquier. Comment faire pour importer une image sur mon ordinateur à la place ? et faut-il l'importer en chemin absolu ?

    Merci d'avance pour votre aide !

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 128
    Par défaut
    Bonsoir,
    qu'est ce que tu ne comprends pas exactement dans la page de manuel de gluLookAt ?

    Sinon pour GLubyte Texture[16] il s'agit des données correspondant à une image en RGBA de dimensions 2x2. C'est à dire larqeur 2 pixels et hauteur 2 pixels, et RGBA signifie que tu as 4 valeurs pour définir une couleur : 3 pour les 3 couleurs primaires rouge, vert et bleu et une composante pour la transparence que l'on appelle dans le jargon le canal alpha. Donc 2 x 2 x 4 = 16 ce qui explique que le tableau Texture contient 16 éléments, ces éléments étant de type GLubyte c'est à dire une valeur comprise dans l'interval [0 - 255].

    Pour savoir comment charger une texture de type JPEG, utilise les mots clefs suivants dans google : { opengl texture jpeg }

    voilà

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Juste au cas où, les tutoriels de NeHe sont traduits ici: http://nehe.developpez.com/
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Je vous remercie pour vos réponses!

    Merci pour le lien LittleWhite je ne savais pas qu'il avait été traduit. Cependant, je l'ai bien compris en anglais donc c'est pas une erreur de compréhension de la langue mais du code :p
    Aussi, en recherchant, j'ai appris qu'il y avait deux moyens de charger un fichier pour ensuite appliquer une texture :

    - faire son propre code de chargement de fichier ( comme ce que propose de faire Nehe d'ailleurs)
    - utiliser une librairie adéquate (comme DeviL).

    Je pense qu'étant débutant, cette deuxième méthode me parait plus appropriée. J'ai d'ailleurs le code qu'il me reste à comprendre du chargement en DeviL d'un fichier :

    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
    34
     
    ILboolean success;
    	ILuint iltexID;
     
    	ilGenImages(1, &iltexID);
    	ilBindImage(iltexID);
    	success = ilLoadImage(fich); 
     
    	if (success)
      	{
    		glGenTextures(1,&texId);
     
    		width = ilGetInteger(IL_IMAGE_WIDTH);
    		height = ilGetInteger(IL_IMAGE_HEIGHT);
    		internalFormat = ilGetInteger(IL_IMAGE_BPP);
    		format = ilGetInteger(IL_IMAGE_FORMAT);
    		type = ilGetInteger(IL_IMAGE_TYPE);
     
        	        glBindTexture(GL_TEXTURE_2D, texId);
     
    		gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat, width,             height, format, type, ilGetData());
     
    		glBindTexture(GL_TEXTURE_2D, 0);
     
     }
      else
      {
    		perror("Erreur de chargement avec devIL : ");
    		exit(45);
      }
     
      	ilDeleteImages(1, &iltexID);
     
    	printf("Texture chargée\n");
    Cependant, dans ce code, je ne comprends pas bien à quel moment le fichier est recherché dans windows en chemin absolu (ou non d'ailleurs). Pourquoi il ne semble pas y avoir de recherches du fichier avant le chargement de ce dernier ?

  5. #5
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    J'ai toujours plusieurs problèmes :s :

    J'ai téléchargé un fichier zip qui contient :

    dans le repertoire "lib" les fichiers suivant :

    - DevIL.dll
    - DevIL.lib
    - ILU.dll
    - ILU.lib
    - ILUT.dll
    - ILUT.lib

    (Il y a aussi un sous-repertoire "unicode" avec les mêmes fichiers donc je sais pas lesquels sont utiles :s).

    Aussi, il y a un autre repertoire "include/IL" avec :

    - config.h
    - config.h.win
    - devil_internal_ex...
    - il.h
    - il_wrap.h
    - ilu.h
    - ilu_region.h
    - ilut.h
    - ilut_config.h

    *** Seulement, j'ai du mal à comprendre l'utilité de ces fichiers et comment les utiliser pour pouvoir intégrer complétement la librairie deviL à un projet openGL.

    -------------------------------------------------------------------------------------------------------------------

    Aussi, une fois ceci fait, j'ai le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    GLuint Texture; 
     
    ilInit(); 
    ilutEnable(ILUT_OPENGL_CONV);  
     
    ilutRenderer(ILUT_OPENGL); 
    Texture = ilutGLLoadImage("superimageavecunecape.jpg");

    Puis enfin pour l'application sur le cube :


    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
    34
    35
    36
    37
    38
    glPushMatrix(); 
      glEnable(GL_TEXTURE_2D); 
      glBindTexture(GL_TEXTURE_2D, Texture); 
     
      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); 
     
        glColor3f(0,1,0); glVertex3f(1,1,-1); 
        glColor3f(0,0,1); glVertex3f(-1,1,-1); 
        glColor3f(1,0,0); glVertex3f(-1,1,1); 
        glColor3f(1,0,0); glVertex3f(1,1,1); 
     
        glColor3f(0,0,1); glVertex3f(-1,-1,-1); 
        glColor3f(0,1,0); glVertex3f(1,-1,-1); 
        glColor3f(1,0,0); glVertex3f(1,1,-1); 
        glColor3f(1,0,0); glVertex3f(-1,1,-1); 
     
        glColor3f(0,1,0); glVertex3f(1,-1,-1); 
        glColor3f(0,0,1); glVertex3f(1,-1,1); 
        glColor3f(1,0,0); glVertex3f(1,1,1); 
        glColor3f(1,0,0); glVertex3f(1,1,-1); 
     
        glColor3f(0,0,1); glVertex3f(-1,-1,-1); 
        glColor3f(0,1,0); glVertex3f(-1,-1,1); 
        glColor3f(1,0,0); glVertex3f(-1,1,1); 
        glColor3f(1,0,0); glVertex3f(-1,1,-1); 
     
        glColor3f(0,1,0); glVertex3f(1,-1,-1); 
        glColor3f(0,0,1); glVertex3f(-1,-1,-1); 
        glColor3f(0,1,0); glVertex3f(-1,-1,1); 
        glColor3f(0,0,1); glVertex3f(1,-1,1); 
      glEnd(); 
     
      glEnable(GL_BLEND); 
      glPopMatrix();

    Ici, j'ai du mal à comprendre comment la fonction ilutGLLoadImage va chercher l'image jpg sans chemin absolu (pour la retrouver sur ton ordi) ?

    Enfin, pourquoi cette fonction est-elle si simple et des personnes s'embêtent à écrire :


    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
    ILboolean success;
    	ILuint iltexID;
     
    	ilGenImages(1, &iltexID);
    	ilBindImage(iltexID);
    	success = ilLoadImage(fich); 
     
    	if (success)
      	{
    		glGenTextures(1,&texId);
     
    		width = ilGetInteger(IL_IMAGE_WIDTH);
    		height = ilGetInteger(IL_IMAGE_HEIGHT);
    		internalFormat = ilGetInteger(IL_IMAGE_BPP);
    		format = ilGetInteger(IL_IMAGE_FORMAT);
    		type = ilGetInteger(IL_IMAGE_TYPE);
     
        	        glBindTexture(GL_TEXTURE_2D, texId);
     
    		gluBuild2DMipmaps(GL_TEXTURE_2D, internalFormat, width,             height, format, type, ilGetData());
     
    		glBindTexture(GL_TEXTURE_2D, 0);
     
     }
      else
      {
    		perror("Erreur de chargement avec devIL : ");
    		exit(45);
      }
     
      	ilDeleteImages(1, &iltexID);
     
    	printf("Texture chargée\n");


    Je sais ce message est long :s j'éspère qu'il ne vous effrayera pas trop ...
    J'attends vos réponses avec impatience !

    Merci d'avance

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Je sais ce message est long :s j'éspère qu'il ne vous effrayera pas trop ...
    Nous avons déjà vu des messages long, ne vous inquiétez pas ... ( et long, avec que du texte ).

    Pour les gens qui recode les fonctions de chargement d'image, c'est parce que certains ne veuille pas utiliser une bibliothèque externe ( comme Devil ). ( Et aussi parce qu'ils ont besoin de géré qu'un seul format ).
    Enfin bref, il peut y avoir plusieurs raisons ( dont l'une qui peut être, juste parce que c'est marrant de recoder la roue )

    Dans la théorie de la configuration de projet ( que ce soit avec Code::Blocks ou Visual Studio ), on doit ajouter les bibliothèques au projet ( les .lib / .a ), et le répertoire des include au projet ( pour avoir les entêtes ).
    Il doit y avoir pleins d'explication partout, vu que c'est un problème courant.

    Pour le répertoire Unicode, c'est juste les même bibliothèque, mais qui gère plus de caractères ( nom de fichier, je pense ) ( encodage Unicode ).

    Finalement, pour les chemins relatifs, ils se basent en partant de l'endroit ou est le programme.
    Donc si on charge un fichier qui a pour chemin ceci:
    "data/image.jpg"
    Il va regarder dans le repertoire du programme, un dossier data, puis un fichier image.jpg dans ce dossier.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Merci beaucoup LittleWhite pour ta réponse parce que je bute là dessus depuis maintenant quelques temps :s

    Après quelques recherches j'ai trouvé sur un forum une personne qui avait un problème d'ajout d'une librairie donc par analogie je m'en suis inspiré.

    Pour mon problème, j'avais comme fichier :

    dans le repertoire "lib" :

    - DevIL.dll
    - DevIL.lib
    - ILU.dll
    - ILU.lib
    - ILUT.dll
    - ILUT.lib

    ----> J'ai enlevé les fichiers dll et j'ai gardé dans le dossier "lib" que les fichiers "lib". J'ai ensuite couper coller le repertoire "lib" à l'emplacement : C:\Program Files\Microsoft Visual Studio 8\SDK.

    Ensuite, je suis aller dans VS2008 sur : projet -> propriétés de Ex1 (mon projet) -> propriétés de configuration -> editeur de liens -> entrée -> dépendances supplémentaires ( j'ai cliqué sur le "..." ).

    Une fois arrivé là, je voisque j'ai :

    - opengl32.lib
    - glut32.lib

    Ainsi que des valeurs héritées :

    - kernel32.lib
    - user32.lib
    - gdi32.lib
    - winspool.lib
    - comdlg32.lib
    - advapi32.lib

    Malheureusement, aucune présence de mes 3 fichiers libs de :
    C:\Program Files\Microsoft Visual Studio 8\SDK.




    J'édite pour faire une remarque ! j'ai recherché finalement mes fichiers libs déjà présent ci-dessus et je l'ai ai tous trouvé dans :
    C:\Program Files\Microsoft SDKs\Windows

    Donc finalement, c'est peut être là qu'il faut les mettre ... qu'en pensez- vous ?

    Seulement la j'ai le choix entre deux repertoires (les lib sont dans les deux je comprends pas) :

    - v5.0
    - v6.0A

    Dans les deux repertoires j'ai les dossiers : "Lib" et "include" (comme les noms des repertoires initiaux quand j'avais téléchargé le zip avec tout dedans...)ça a l'air de coller mais après je vois toujours pas mes lib après la manipulation sous VS2008.



    Aussi, il y a un autre repertoire "include/IL" avec :

    - config.h
    - config.h.win
    - devil_internal_ex...
    - il.h
    - il_wrap.h
    - ilu.h
    - ilu_region.h
    - ilut.h
    - ilut_config.h

    Pour ces fichiers, j'ai tout mis dans mon repertoire de projet, à savoir, Ex1, avec les autres .h déjà existant comme : "stdafx.h".
    Au même endroit, j'ai rajouté les "dll" que j'avais enlevé de mon fichier "lib" juste avant.



    La pareil, les .h que j'ai mis dans mon repertoire Ex1 (projet), il vaut peut être mieux les mettre à : C:\Program Files\Microsoft SDKs\Windows
    dans le repertoire "include" (ou il y a déjà plein de fichiers .h) après avoir choisi entre les dossiers V5.0 et V6.0A ... ?

    Et pour les dll je sais pas non plus ...




    Voila ou j'en suis, si jamais vous pouvez m'éclairer d'avantage je vous en serez reconnaissant !

    Merci encore

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Alors, je n'ai pas du tout la même méthode.

    Ma méthode:

    Les .dll c'est soit dans le répertoire avec l'executable
    Soit dans C:\Windows\system32

    Les bibliothèques ( .lib / .a ), souvent j'aime bien avoir un dossier 'lib' dans mon dossier de projet. Après j'ajoute ce dossier, dans les propriété du projet / ou les propriétés de Visual Studio.
    Une fois que j'ai ajouté mon dossier, j'ajoute les .lib au projet

    Pour les entêtes ( .h ), c'est un peu pareil. J'aime bien avoir un dossier 'include' dans mon projet. Après je l'ajoute dans Visual et c'est tout.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    " Alors, je n'ai pas du tout la même méthode.

    Ma méthode:

    Les .dll c'est soit dans le répertoire avec l'executable
    Soit dans C:\Windows\system32


    Ok je vois, mais en fait pour ma part, mon arborescence donne :

    Repertoire initial
    C:\Documents and Settings\Administrator\Desktop\openGL\Ex0 :

    -> Ex0/Ex1 :

    -> Ex1/Debug : Fichiers .obj, mt.dep, vc90.pdb ...

    -> Ex1/include (j'ai mis dedans tous les .h comme tu m'as conseillé avec le fichier config.h.win (cette extension c'est comme un .h ?))

    -> Ex1/lib (j'ai suivi encore tes conseils en mettant DevIL.lib, ILU.lib et ILUT.lib).

    -> Ex1/Fichiers .cpp et quelques .h déjà existant (je met aussi ces .h dans le repertoire include ?)

    -> Ex1/ Fichier Ex1.vcproj, Ex1.vcproj.WinMac..., Ex1.vcproj.MASTERXP8530.A.... (je sais pas ce que c'est).

    -> Ex0/Debug : Ex1.exe + les dll.

    -> Ex0/Fichier Ex1.ncb (je ne sais pas ce que c'est).

    -> Ex0/Fichier Ex1.sln (idem).

    -> Ex0/Fichier Ex1.suo (idem).



    Les bibliothèques ( .lib / .a ), souvent j'aime bien avoir un dossier 'lib' dans mon dossier de projet. Après j'ajoute ce dossier, dans les propriété du projet / ou les propriétés de Visual Studio.
    Une fois que j'ai ajouté mon dossier, j'ajoute les .lib au projet.


    J'ai suivi tes conseils en mettant comme j'ai dis plus haut les .lib dans un dossier "C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\lib"

    Mais je ne vois pas comment faire le lien pour dire sous VS2008 que ce dossier doit être pris en compte et même que les libs de ce dossier doivent être inclus dans le projet.



    Pour les entêtes ( .h ), c'est un peu pareil. J'aime bien avoir un dossier 'include' dans mon projet. Après je l'ajoute dans Visual et c'est tout. "


    Comme les .lib j'ai suivi tes conseils mais même problème :s


    Merci en tout cas ça me fait avancer !

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Tout ce qu'il vous manque c'est de chercher dans les menus de configuration du projet.

    Projet > Propriété -> Compilation ( ou C++ )
    Et il faut aussi allez voir dans le coté du "Linker"

    Et puis, il y a deux entrées, bibliothèques supplémentaires, et dossier ou les bibliothèques sont.

    Ne vous étonnez pas que je ne me rappelle pas des noms ... d'une part je les voit plus souvent en anglais, et en plus j'utilise pas souvent ce logiciel.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Alors actuellement, dans mon dossier Ex1(projet), j'ai bien mes repertoires "include" (avec les .h), "lib" (avec les .lib) et un fichier "data" (vide pour l'instant :s (mais normalement pour mettre les images --> "Texture = ilutGLLoadImage("data/image.jpg");"
    ).

    ---> Auriez-vous des liens pour télécharger toutes sortes d'images pour les textures ?)

    Donc voila, maintenant il me faut faire le lien sous VS2008 entre mon projet et les repertoires ci-dessus avec les fichiers rajoutés pour la librairie DeviL.

    J'essai donc en allant dans projet -> Ex1 et la dans C/C++ -> général , j'ai une ligne avec : "Autres repertoires Includes" ...

    ---> C'est la qu'on rajoute les sous-repertoires "includes", "lib" et "data" pour dire que c'est lié au projet ??
    (meme si c'est déjà des sous-repertoires du projet dans l'arborescence, VS2008 ne sait pas que ces sous(dossiers sont rattachés au projet ?).

    Aussi, au lieu d'aller dans C/C++, on a projet -> Ex1 -> editeur de liens -> entrée -> dépendances supplémentaires (mais là quand je clique dessus, je vois les .lib déjà dépendant du dossier mais aucune trace de mes nouveaux .lib ...

    ---> peut être faut-il déjà dire que le repertoire "lib" est rattaché au projet pour ensuite voir les .lib apparaitre pour les dépendances ?? )

    Merci si vous avez plus d'informations pour les liens entre mes nouveaux repertoires et fichiers pour ma nouvelle librairie et mon projet sous VS2008

    Bonne journée !

  12. #12
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    On va y arriver, nous sommes presque à la fin de votre problème. Pardon de ne pas donner les noms des menus précisément, mais je n'ai pas de VS sous la main ...

    ---> Auriez-vous des liens pour télécharger toutes sortes d'images pour les textures ?)
    Perso, je fais des recherches sur google image
    ( Faudrait plus faire attention aux droits )

    J'essai donc en allant dans projet -> Ex1 et la dans C/C++ -> général , j'ai une ligne avec : "Autres repertoires Includes" ...
    Dans ce menu, nous ajoutons que le dossier 'include'
    Pas besoin de mettre les dossiers dans le projet en lui même. Il faut juste les mettre dans les options du projet.

    Aussi, au lieu d'aller dans C/C++, on a projet -> Ex1 -> editeur de liens -> entrée -> dépendances supplémentaires (mais là quand je clique dessus, je vois les .lib déjà dépendant du dossier mais aucune trace de mes nouveaux .lib ...
    Ici, il est vrai qu'il faut donner les noms de vos bibliothèques supplémentaires ( Tout ce qui est en rapport avec Devil ( et OpenGL )

    Il doit y avoir une autre entrée, dans le menu de l'éditeur de liens, pour ajouter les dossiers de dépendances supplémentaires. Dans celui ci il faudra bien sur ajouter le dossier 'lib'.

    Faites attention pour le dossier data, il doit se trouver dans le même dossier que celui de l'exectutable, au moment de l'execution, sinon il ne va pas trouvé les fichiers.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  13. #13
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Alors, voici ce que j'ai fait :

    1) Propriétés de configuration->C/C++->Général->Autres répertoires Include
    --> C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include
    (avc les .h de ma nouvelle librairie dedans).

    2) Propriétés de configuration->Editeur de liens->Général->Répertoires de bibliothèques supplémentaires--> C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\lib(avec les .lib de ma nouvelle librairie dedans)

    3) Propriétés de configuration->Editeur de liens->Entrée->Dépendances supplémentaires
    Mais ici, je ne trouve pas les .lib de ma nouvelle librairie (j'ai pourtant bien rattaché le repertoire "lib" avec les .lib au projet à l'étape 2 je ne comprends pas).

    Si vous avez une idée je suis preneur

    Merci encore !

  14. #14
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Citation Envoyé par betsprite Voir le message
    3) Propriétés de configuration->Editeur de liens->Entrée->Dépendances supplémentaires
    Mais ici, je ne trouve pas les .lib de ma nouvelle librairie (j'ai pourtant bien rattaché le repertoire "lib" avec les .lib au projet à l'étape 2 je ne comprends pas).
    Il faut les rajouter vous même à la main ( en sélectionnant les fichiers des bibliothèques, ou taper le nom des bibliothèques ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  15. #15
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    "Il faut les rajouter vous même à la main ( en sélectionnant les fichiers des bibliothèques, ou taper le nom des bibliothèques ). "


    Donc, dans : Propriétés de configuration->Editeur de liens->Entrée->Dépendances supplémentaires,
    juste à droite, ou il y a marqué : "opengl32.lib glut32.lib" (juste avant de cliquer sur les "[...]" qui ouvre une autre fenètre), j'écris :

    "opengl32.lib glut32.lib DevIL.lib ILU.lib ILUT.lib" ? c'est ça ?



    Une fois avoir procédé de cette façon, il me reste quand même des erreurs ...



    Erreur 1 error C2065: 'ILUT_OPENGL_CONV'*: identificateur non déclaré c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 60 Ex1
    Erreur 2 error C3861: 'ilutEnable'*: identificateur introuvable c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 60 Ex1
    Erreur 3 error C2065: 'ILUT_OPENGL'*: identificateur non déclaré c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 62 Ex1
    Erreur 4 error C3861: 'ilutRenderer'*: identificateur introuvable c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 62 Ex1
    Erreur 5 error C3861: 'ilutGLLoadImage'*: identificateur introuvable c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 63 Ex1


    Après ça doit être sur les .h du repertoire include, je dois quand mpême faire des "#include "fichier.h"" en haut de mon fichier de code non ?
    Mais lesquels je dois inclure ? tous ?

    quand je rajoute : " #include"ilut.h" ", j'ai alors comme erreur :


    Erreur 1 fatal error C1083: Impossible d'ouvrir le fichier include*: 'IL/il.h'*: No such file or directory c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\ilut.h 24 Ex1



    C'est étrange, car le seul chemin relatif que j'ai mis pour le repertoire "include" avec les .h est :

    "C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include"
    (Donc pas de IL/il.h .... )
    Par contre, quand j'ai telecharger le fichier avec tous les repertoires de la librairie, le repertoire "include" avait un sous-repertoire "IL" (que j'ai effacé pour réduire le chemin d'accés) et dans "IL", il y avait les .h ... donc c'est peut être parce que j'ai supprimé le sous-repertoire IL entre le dossier "include" et les fichiers .h mais qu'est ce qui aurait été affecté par ce changement d'accés ?


    Je vous remercie pour votre aide

  16. #16
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Exactement ( pour les includes ).

    Il faut quand même les mettre ( les #include ). On ne peut pas éviter.

    Et puis pour le répertoire IL il est important si vous faites:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "IL/ilut.h"
    Car vous dites bien de prendre un fichier qui se trouve dans un répertoire 'IL'

    Maintenant si vous enlever le repertoire IL, vous pouvez écrire ça:
    Et cela marchera
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  17. #17
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Ok merci LitttleWhite !

    Alors, j'ai rajouté tous les #include au début de mon programme :

    #include "ilut.h"
    #include "config.h"
    #include "il_wrap.h"
    #include "ilu.h"
    #include "il.h"
    #include "devil_internal_exports.h"
    #include "ilu_region.h"
    #include "ilut_config.h"

    (Dois-je rajouter aussi le fichier "config.h.win" en include ? car je ne connais pas l'extension .win ...).

    Malgré tout ces #include, j'ai toujours la fatal error :


    Erreur 1 fatal error C1083: Impossible d'ouvrir le fichier include*: 'IL/il.h'*: No such file or directory c:\documents and settings\administrator\desktop\opengl\ex0\ex1\include\ilut.h 24 Ex1



    Sachant que je n'ai pas rajouté le sous-repertoire IL entre le repertoire "include" et les fichiers .h de ma librairie (tu m'as dis que normalement c'était inutile si on rajoutait rien dans le chemin relatif du "#include").

    Seulement, j'ai l'impression que les fichiers .h du repertoire "include" sont dépendants du sous-repertoire "IL" supprimé, par exemple pour config.h :


    /* include/IL/config.h. Generated by configure. */
    /* include/IL/config.h.in. Generated from configure.in by autoheader. */
    #ifndef __CONFIG_H__
    #define __CONFIG_H__

    #define IL_USE_PRAGMA_LIBS

    // Supported image formats (IL)

    // #define IL_NO_BLP
    // #define IL_NO_BMP
    // #define IL_NO_CUT
    // #define IL_NO_CHEAD
    // #define IL_NO_DCX
    // #define IL_NO_DDS
    // #define IL_NO_DICOM
    //....
    #define IL_USE_JPEGLIB_UNMODIFIED 1
    //#define IL_USE_DXTC_NVIDIA
    #define IL_USE_DXTC_SQUISH



    Si jamais vous avez une idée je vous écoute

    Merci beaucoup ! je vais y arriver à force :p


    Bon je viens d'essayer de rajouter IL dans l'arborescence tel qu'on ait :

    C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include\IL

    au lieu de

    C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include

    (et dans IL les .h ...)

    J'ai donc changé le chemin relatif dans VS2008 pour le repertoire des .h :

    Propriétés de configuration->C/C++->Général->Autres répertoires Include
    et j'ajoute :
    "C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include\IL"

    Malheureusement, malgré tout ça, et en essayant de rajouter "IL/" dans les #include pour les chemins relatifs, j'ai toujours l'erreur :

    Erreur 1 fatal error C1083: Impossible d'ouvrir le fichier include*: 'IL/ilut.h'*: No such file or directory c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 8 Ex1

    J'attends vos propositions avec impatience

    Merci !




    Bon ok! je viens de comprendre un truc, en fait, l'ordre des #include est important car par exemple le ilu.h dépend de il.h car en ouvrant ilu.h je vois la ligne :
    "#include <IL/il.h>"

    Donc j'ai mis en premier dans mon programme " #include "IL/il.h" " et j'ai mis dans l'ordre.
    Seulement toujours le problème :

    "Erreur 1 fatal error C1083: Impossible d'ouvrir le fichier include*: 'IL/il.h'*: No such file or directory c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 8 Ex1
    "

  18. #18
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    Citation Envoyé par betsprite Voir le message

    /* include/IL/config.h. Generated by configure. */
    /* include/IL/config.h.in. Generated from configure.in by autoheader. */
    #ifndef __CONFIG_H__
    #define __CONFIG_H__

    #define IL_USE_PRAGMA_LIBS

    // Supported image formats (IL)

    // #define IL_NO_BLP
    // #define IL_NO_BMP
    // #define IL_NO_CUT
    // #define IL_NO_CHEAD
    // #define IL_NO_DCX
    // #define IL_NO_DDS
    // #define IL_NO_DICOM
    //....
    #define IL_USE_JPEGLIB_UNMODIFIED 1
    //#define IL_USE_DXTC_NVIDIA
    #define IL_USE_DXTC_SQUISH



    Si jamais vous avez une idée je vous écoute

    Merci beaucoup ! je vais y arriver à force :p


    Bon je viens d'essayer de rajouter IL dans l'arborescence tel qu'on ait :

    C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include\IL

    au lieu de

    C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include

    (et dans IL les .h ...)

    J'ai donc changé le chemin relatif dans VS2008 pour le repertoire des .h :

    Propriétés de configuration->C/C++->Général->Autres répertoires Include
    et j'ajoute :
    "C:\Documents and Settings\Administrator\Desktop\openGL\Ex0\Ex1\include\IL"

    Malheureusement, malgré tout ça, et en essayant de rajouter "IL/" dans les #include pour les chemins relatifs, j'ai toujours l'erreur :

    Erreur 1 fatal error C1083: Impossible d'ouvrir le fichier include*: 'IL/ilut.h'*: No such file or directory c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 8 Ex1

    J'attends vos propositions avec impatience

    Merci !




    Bon ok! je viens de comprendre un truc, en fait, l'ordre des #include est important car par exemple le ilu.h dépend de il.h car en ouvrant ilu.h je vois la ligne :
    "#include <IL/il.h>"

    Donc j'ai mis en premier dans mon programme " #include "IL/il.h" " et j'ai mis dans l'ordre.
    Seulement toujours le problème :

    "Erreur 1 fatal error C1083: Impossible d'ouvrir le fichier include*: 'IL/il.h'*: No such file or directory c:\documents and settings\administrator\desktop\opengl\ex0\ex1\ex1.cpp 8 Ex1
    "
    En fait, chose à laquelle je n'avais pas beaucoup réflechi, le sous répertoire IL est important ( car les include dans ilut.h sont de la forme "IL/il.h" ).
    Par contre, vous avez fait une erreur, dans Visual Studio, il faut bien toujours indiquer le repertoire include et non include/IL.

    Réexplication:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "IL/il.h"
    Si on donne à visual, le repertoire include, il va donc chercher dans le repertoire include, et il va chercher: "IL/il.h" ce qui veut dire, dans le repertoire IL, le fichier il.h

    Mais après, si vous donner le repertoire include/IL à Visual, il va chercher toujours le repertoire IL, mais nous sommes déjà dans celui ci, donc il ne le trouvera pas.

    J'espère que vous comprennez mieux...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  19. #19
    Membre éclairé
    Avatar de betsprite
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    472
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 472
    Par défaut
    Oui merci beaucoup LittleWhite c"était bien ça le problème !
    J'ai plus cette erreure du coup mais par contre j'en ai une volée qui est apparut :p

    Et ces erreurs sont toutes référencées dans le fichier il_wrap.h :s
    exemple :


    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

    .....

    Ce fichier a été mal codé ou c'est le lien avec mon code qui amène toutes ces erreures ? :s

  20. #20
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 157
    Billets dans le blog
    152
    Par défaut
    C'est soit un problème dans votre code, soit l'ordre des includes qui est faux.
    Enfin je pense.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. WebGL : appliquer des textures sur les objets
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 20/07/2015, 21h22
  2. Comment plaquer une texture 2D sur un objet GLUT ?
    Par zak62000 dans le forum GLUT
    Réponses: 2
    Dernier message: 03/03/2009, 15h37
  3. Ajouter une textures sur des objets 3D openGL
    Par rere56 dans le forum 3D
    Réponses: 1
    Dernier message: 27/07/2007, 11h08
  4. [Java3D] Textures sur un objet
    Par vero55 dans le forum 3D
    Réponses: 3
    Dernier message: 18/04/2007, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo