Partage
  • Partager sur Facebook
  • Partager sur Twitter

[OpenGL] Comment l'installer ?

SVP

    12 avril 2006 à 21:00:25

    Bonsoir tout le monde !

    Je viens aujourd'hui de trouver un tuto bien sympa sur la programmation avec OpenGL, mais à vrai dire, je n'est pas du tout compris comment l'installer o_O
    Alors si une ame charitable qui par hasard s'y connaitrait sufisamment en OpenGl pouvait m'expliquer comment on l'installe : liens, configurations du linker... etc

    Au passage, le debugger m'indique les erreurs suivantes :

    Linking console executable: C:\Documents and Settings\BARBA-ROSSA\Bureau\test openGL\OpenGL.exe
    .objs\main.o:main.c:(.text+0x1c): undefined reference to `__glutInitWithExit@12'
    .objs\main.o:main.c:(.text+0x3c): undefined reference to `__glutCreateWindowWithExit@8'
    .objs\main.o:main.c:(.text+0x5c): undefined reference to `__glutCreateMenuWithExit@8'
    .objs\main.o:main.c:(.text+0xae): undefined reference to `glutInitDisplayMode@4'
    .objs\main.o:main.c:(.text+0xc5): undefined reference to `glutInitWindowPosition@8'
    .objs\main.o:main.c:(.text+0xdc): undefined reference to `glutInitWindowSize@8'

    J'ai pourtant bien inclut :

    #include <GL/gl.h>
    #include <GL/glut.h>

    Mais je ne suis pas sûr que ces librairies soient pré-installées...
    Pour ma part, je suis sous Code::Blocks..
    Merci d'avance ++ :)
    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2006 à 21:01:28

      Tu peux nous donner le lien du tutaux please ?
      • Partager sur Facebook
      • Partager sur Twitter
        12 avril 2006 à 21:05:28

        Raa Glut caca !
        Je te conseille
        1. De lire le tuto de M@teo sur la SDL
        2. De continuer ici http://www.siteduzero.com/tuto-3-1346-0-creez-des-programmes-en-3d-avec-opengl.html
        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2006 à 21:15:57

          Citation : Cédric

          Bonsoir tout le monde !

          Je viens aujourd'hui de trouver un tuto bien sympa sur la programmation avec OpenGL



          tu peux nous passer le lien stp :)
          • Partager sur Facebook
          • Partager sur Twitter
            13 avril 2006 à 1:56:45

            Citation : Cédric


            Linking console executable: C:\Documents and Settings\BARBA-ROSSA\Bureau\test openGL\OpenGL.exe
            .objs\main.o:main.c:(.text+0x1c): undefined reference to `__glutInitWithExit@12'
            .objs\main.o:main.c:(.text+0x3c): undefined reference to `__glutCreateWindowWithExit@8'
            .objs\main.o:main.c:(.text+0x5c): undefined reference to `__glutCreateMenuWithExit@8'
            .objs\main.o:main.c:(.text+0xae): undefined reference to `glutInitDisplayMode@4'
            .objs\main.o:main.c:(.text+0xc5): undefined reference to `glutInitWindowPosition@8'
            .objs\main.o:main.c:(.text+0xdc): undefined reference to `glutInitWindowSize@8'



            Il te manque quelques DLL.
            • Partager sur Facebook
            • Partager sur Twitter
              13 avril 2006 à 6:44:34

              Citation : [Kansuu]


              Il te manque quelques DLL.



              Non, en l'occurance libglut32.a
              Rajoute -lglut32 dans te options de compilation (linker).

              Kansuu : l'absence d'une DLL se détecte à l'exécution (message d'erreur au lancement).
              • Partager sur Facebook
              • Partager sur Twitter
                13 avril 2006 à 18:01:51

                undefined reference to trucMuch = le plus souvent un problème de link.

                Sinon pourquoi Glut caca ?

                Au passage, <GL/glut.h> s'occupe d'inclure <GL/gl.h>, donc tu peux virer ce dernier.
                • Partager sur Facebook
                • Partager sur Twitter
                  13 avril 2006 à 18:03:33

                  http://jeux.developpez.com/tutoriels/cours-opengl/

                  Voilà pour le lien...

                  Sinon, je vais de ce pas voir ton tutos sur OpenGL et en effet, ca ne me tentait pas tellement d'apprendre une nouvelle librairie 2D pour faire de la 3D ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 avril 2006 à 18:47:10

                    Cédric : une fois que tu as crées le contexte OpenGL en suivant mon tuto rien ne t'empeche de faire des appels OpenGL complexes que tu trouveras dans d'autres tutos sur internet.

                    @ WhiteTiGer : Glut est abandonné depuis longtemps. Et dans la dernière version avant sa mort la gestion des évenements laisse à désirer (pas de key_up) du coup dès qu'on veut controler quelque chose au clavier, l'ergonomie est à chier.
                    Je parle en connaissance de causes j'avais commencé le tuto avec Glut et grâce au tuto de M@teo je me suis mis à SDL et la présence de son tuto me simplifie la vie car j'ai moins de choses à expliquer et je peux m'attarder sur ce qui est OpenGL pur. En ce moment je réadapte donc mon tuto à la SDL et à la V3.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 avril 2006 à 20:18:14

                      Ok, par contre il y a bien une fonction key_up :
                      glutKeyboardUpFunc().
                      Mais bon, je trouve que, pour commencer, glut est plus clair à utiliser que la SDL quand même, quelques appels de fonctions et c'est réglé, t'as ta boucle d'affichage.
                      Mais effectivement pour ton tuto vu que les cours de SDL viennent de sortir du four, pourquoi se priver ? :p
                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 avril 2006 à 20:46:55

                        Citation : WhiteTiGer

                        je trouve que, pour commencer, glut est plus clair à utiliser que la SDL quand même, quelques appels de fonctions et c'est réglé, t'as ta boucle d'affichage.


                        J'utilise SDL et je trouve ça beaucoup plus pratique, j'aime pas trop les CallBacks dans le cas d'un jeu, à la limite c'est pratique pour une simple interface graphique car on a pas un travail permanent derrière...
                        Donc je te conseille aussi SDL :)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 avril 2006 à 20:54:33

                          Citation : WhiteTiGer

                          glutKeyboardUpFunc()



                          C'est là où on fait la différence en Spec et Implémentation.
                          Glut est abandonné et n'implémente pas cette fonction. (contrairement à FreeGlut).

                          Donc non je confirme Glut lui même c'est pas cool, freeglut peut etre mais SDL est là, SDL nous permet de charger des textures en 2 sec sans loader externe (glut ... rien, glaux ? bmp), et SDL nous permettra de gérer le réseau, le son et plein d'autres choses.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 avril 2006 à 20:59:19

                            C'est vrai pour les textures, t'as pas tort, il ma fallu coder un loader de tga...
                            Aller hop je regarde comment ça marche de plus près et je passe mon mini-moteur sous SDL :D (j'étais déjà à moitié converti faut dire :P), je sens que pour implémenter un systeme d'état ça va être beaucoup plus simple qu'avec glut.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 avril 2006 à 21:07:55

                              Héhé le fameux loader TGA ;) Qui n 'est pas passé par là.

                              Tiens pour te faire gagner du temps, une petite fonction que j'ai fait pour créer une texture avec OpenGL SDL (chargement surface + inversion verticale (SDL et OpenGL gère pas les images de la mm manière) + création texture OpenGL) :


                              textureloader.h
                              #ifndef TEXTURELOADER_H
                              #define TEXTURELOADER_H

                              #include <GL/gl.h>

                              GLuint loadTexture(const char * filename);

                              #endif //TEXTURELOADER_H


                              textureloader.cpp ou .c

                              #include "textureLoader.h"
                              #include <SDL/SDL.h>
                              #include <SDL/SDL_image.h>

                              #ifdef __cplusplus
                              #include <cstring>
                              #else
                              #include <string.h>
                              #endif

                              GLuint loadTexture(const char * filename)
                              {
                                  GLuint glID;
                                  SDL_Surface * picture_surface = NULL;
                                  SDL_Surface *gl_surface = NULL;
                                  SDL_Surface * gl_fliped_surface = NULL;
                                  Uint32 rmask, gmask, bmask, amask;
                                  unsigned int current_line,pitch;

                                  picture_surface = IMG_Load(filename);
                                  if (picture_surface == NULL)
                                      return 0;

                              #if SDL_BYTEORDER == SDL_BIG_ENDIAN
                                  rmask = 0xff000000;
                                  gmask = 0x00ff0000;
                                  bmask = 0x0000ff00;
                                  amask = 0x000000ff;
                              #else
                                  rmask = 0x000000ff;
                                  gmask = 0x0000ff00;
                                  bmask = 0x00ff0000;
                                  amask = 0xff000000;
                              #endif

                                  gl_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
                                                                      picture_surface->w,picture_surface->h,
                                                                      32,rmask, gmask, bmask, amask);
                                  gl_fliped_surface = SDL_CreateRGBSurface(SDL_SWSURFACE,
                                                                      picture_surface->w,picture_surface->h,
                                                                      32,rmask, gmask, bmask, amask);

                                  if ((gl_surface == NULL)||(gl_fliped_surface == NULL))
                                  {
                                      SDL_FreeSurface(gl_fliped_surface);
                                      SDL_FreeSurface(gl_surface);
                                      SDL_FreeSurface(picture_surface);
                                      return 0;
                                  }

                                  if (SDL_BlitSurface(picture_surface,NULL,gl_surface,NULL) < 0)
                                  {
                                      SDL_FreeSurface(picture_surface);
                                      return 0;
                                  }

                                  SDL_LockSurface(gl_surface);
                                  SDL_LockSurface(gl_fliped_surface);

                                  pitch = gl_surface->pitch;
                                  for (int current_line = 0; current_line < gl_surface->h; current_line ++)
                                  {
                                      memcpy(&((unsigned char* )gl_fliped_surface->pixels)[current_line*pitch],
                                              &((unsigned char* )gl_surface->pixels)[(gl_surface->h -current_line)*pitch],
                                              pitch);
                                  }

                                  SDL_UnlockSurface(gl_fliped_surface);
                                  SDL_UnlockSurface(gl_surface);



                                  glGenTextures(1, &glID);

                                  glBindTexture(GL_TEXTURE_2D, glID);

                                  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, gl_fliped_surface->w,
                                                  gl_fliped_surface->h, 0, GL_RGBA,GL_UNSIGNED_BYTE,
                                                  gl_fliped_surface->pixels);

                                  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
                                  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

                                  SDL_FreeSurface(gl_fliped_surface);
                                  SDL_FreeSurface(gl_surface);
                                  SDL_FreeSurface(picture_surface);

                                  return glID;
                              }
                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 avril 2006 à 21:45:05

                                Okay, merci, je vais garder ça bien au chaud :D le temps de passer le reste sous SDL.

                                IMG_Load() pour charger n'importe quelle type d'image, alalala... *se tape la tete contre un mur*
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  13 avril 2006 à 21:55:48

                                  Citation : WhiteTiGer

                                  Okay, merci, je vais garder ça bien au chaud :D le temps de passer le reste sous SDL.

                                  IMG_Load() pour charger n'importe quelle type d'image, alalala... *se tape la tete contre un mur*



                                  Pas tout à fait n'importe quel type mais beaucoup :) et sans prise de tête pour nous.
                                  Bon le code est un premier brouillon, il est pas tout à fait C compatible et il manque 2 free en cas d'erreur du blit (rare de toute façon).
                                  Je donnerai la version définitive lors du chapitre sur les textures mais je pense que pour toi ça suffira, tu sauras le modifier si il faut pour tes besoins.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  [OpenGL] Comment l'installer ?

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown