Partage
  • Partager sur Facebook
  • Partager sur Twitter

sdl et opengl

#define

Sujet résolu
    22 juin 2008 à 15:43:11

    bonjours à tous

    j'ais fait du visual basic
    un peu de c et j'ai survoler le c++ graçe à mateo21, tous ça pour me situer.

    Mon problème:
    apres avoir entrée le programme de la grue dont mateo21 est l'auteur,j'ai les erreurs suivantes:

    17:36 C:\Dev-Cpp\d3\grue.cpp "+" may not appear in macro parameter list
    C:\Dev-Cpp\d3\grue.cpp In function `int SDL_main(int, char**)':
    36 C:\Dev-Cpp\d3\grue.cpp `LARGEUR_ECRAN' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)

    j'ai mis tout le programe pour plus de compréhension.
    si quelq'un peut m'aider ,merçi d'avance.


    #include <SDL/SDL.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <cstdlib>

    #define LARGEUR_BASE 50
    #define HAUTEUR_BASE 20

    #define LARGEUR_BRAS_1 150
    #define HAUTEUR_BRAS_1 15

    #define LARGEUR_BRAS_2 50
    #define HAUTEUR_BRAS_2 10

    #define TAILLE_CAISSE 10

    #define LARGEUR_ECRAN(LARGEUR_BASE + LARGEUR_BRAS_1 + HAUTEUR_BRAS_2 + 50)
    #define HAUTEUR_ECRAN(HAUTEUR_BASE + LARGEUR_BRAS_1 + HAUTEUR_BRAS_2 + 50)



    int angle1=45;
    int angle2=-20;
    int longueur=50;

    void dessiner();

    int main(int argc,char *argv[])
    {
    SDL_Event event;

    SDL_Init(SDL_INIT_VIDEO);
    atexit(SDL_Quit);

    SDL_WM_SetCaption("Exercice: une grue",NULL);
    SDL_SetVideoMode(LARGEUR_ECRAN,HAUTEUR_ECRAN,32,SDL_OPENGL);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0,LARGEUR_ECRAN,0,HAUTEUR_ECRAN);

    SDL_EnableKeyRepeat(10,10);

    Dessiner();

    while(SDL_WaitEvent(&event))
    {
    switch(event.type)
    {
    case SDL_QUIT:
    exit(0);
    break;
    case SDL_KEYDOWN:
    switch(event.key.keysym.sym)
    {
    case SDLK_UP:
    longueur==;
    if(longueur<10)
    longueur=10;
    break;
    case SDLK_DOWN:
    longueur++;
    if(longueur>100)
    longueur=100;
    break;
    case SDLK_LEFT:
    if((event.key.keysym.mod & KMOD_LSHIFT)==KMOD_LSHIFT)
    {
    angle1++;
    if(angle1>90)
    angle1=90;
    }
    else
    {
    angle2++;
    if(angle2>90)
    angle2=90;
    }
    break;
    case SDLK_RIGHT:
    if((event.key.keysym.mod & KMOD_LSHIFT)==KMOD_LSHIFT)
    {
    angle1--;
    if(angle1<10)
    angle1=10;
    }
    else
    {
    angle2--;
    if(angle2<-90)
    angle2=-90;
    }
    break;
    }
    break;
    }
    Dessiner();
    }



    return 0;
    }

    /*
    Dessine un rectangle avec comme point de refrance
    le milieu du coté gauche
    */
    void dessineRectangle(double largeur,double hauteur)
    {
    glBegin(GL_QUADS);
    glVertex2d(0,-hauteur/2);
    glVertex2d(0,hauteur/2);
    glVertex2d(largeur,hauteur/2);
    glVertex2d(largeur,-hauteur/2);
    glEnd();
    }

    /*
    dessine le repere actuel pour faciliter
    la compreession des transformations
    Utiliser "echelle pour avoir un repere bien orrienté et positionné
    mais avec une echelle differante.
    */
    void dessinerRepere(unsigned int echelle=1)
    {
    glPushMatrix();
    glScalef(echelle,echelle,echelle);
    glBegin(GL_LINES);
    glColor3ub(0,0,255);
    glVertex2i(0,0);
    glVertex2i(0,1);
    glColor3ub(0,255,0);
    glVertex2i(0,0);
    glVertex2i(0,1);
    glEnd();
    glPopMatrix()
    }

    void Dessiner()
    {
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    /*je deplace mon repere initial(actuelement
    en bas à gauche de l'ecran)*/
    glTranslated(LARGEURBASE/2,HAUTEUR_BASE,0);

    //la base
    glColor3ub(254,128,1);
    dessineRectangle(LARGEUR_BASE,HAUTEUR_BASE);

    //je me place en haut et au milieu de la base
    glTranslated(LARGEURBASE/2,HAUTEUR_BASE/2,0);

    // le grand bras
    glRotate(angle1,0,0,1);
    glColor3ub(248,230,7);
    dessineRectangle(LARGEUR_BRAS_1,HAUTEUR_BRAS_1);

    // je me place au bout du grand bras
    glTranslated(LAGEURBRAS_1,0,0);

    //puis je m'ocupe du petit bras
    glRotate(angle2,0,0,1);
    glColor3ub(186,234,21);
    dessineRectangle(LARGEUR_BRAS_2,HAUTEUR_BRAS_2);

    //je me place au bout du petit bras
    glTranslated(LAGEURBRAS_2,0,0);
    /* j'annule les rotations pour avoir mon repère aligné
    avec le repère d'origine*/
    glRotate(-angle1 -angle2,0,0,1);

    // je dessine le fil
    glColor3ub(255,255,255);
    glBegin(GL_LINES);
    glVertex2i(0,0);
    glVertex2i(0,-longueur);
    glEnd();

    /*je descend en bas du fil(avec un petit decalage
    sur X pour anticiper le dessin de la caisse */
    glTranslated(-TAILLE_CAISSE/2,-longueur,0);

    //et je dessine en fin la caisse
    glColor3ub(175,175,85);
    dessineRectangle(TAILLE_CAISSE,TAILLE_CAISSE);

    glFlush();
    SDL_GL_SwapBuffers();
    }
    • Partager sur Facebook
    • Partager sur Twitter
      22 juin 2008 à 17:21:06

      Bonjour,

      Déjà je suppose que le tutoriel auquel tu fais référence est celui écrit par Kayl.
      Ensuite mets ton code entre les balises cpp quand tu postes, ça en facilite la lecture.
      <code type="cpp">
      // Ton code
      </code>
      

      Concernant ton problème, mets des espaces dans tes define sinon le préprocesseur croit que tu déclares une macro :
      #define LARGEUR_ECRAN (LARGEUR_BASE + LARGEUR_BRAS_1 + HAUTEUR_BRAS_2 + 50)
      #define HAUTEUR_ECRAN (HAUTEUR_BASE + LARGEUR_BRAS_1 + HAUTEUR_BRAS_2 + 50)
      
      • Partager sur Facebook
      • Partager sur Twitter
        23 juin 2008 à 6:15:53

        1er: mille excuses pour KAYL je me suis effectivement trompé d'auteur.
        2em: c'est plus clair avec des balises ,je m'en souviendrais

        quand à mon problème ,même en metant des espaces ,il est toujours là.
        en attendant d'autres solution ,je te remerçis pour ta réponse.


        • Partager sur Facebook
        • Partager sur Twitter
          23 juin 2008 à 9:07:29

          Et en enlevant carrément les parenthèses dans les deux lignes indiquées précédemment ?
          • Partager sur Facebook
          • Partager sur Twitter
            23 juin 2008 à 18:00:08

            salut à tous,j'arrive du boulot. j'ais essayé le programme sans parenthèses sur les deux lignes et ça marche .
            merci à tous.
            • Partager sur Facebook
            • Partager sur Twitter

            sdl et opengl

            × 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