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

SDL Discussion :

SDL tuto Anomaly probleme de couleurs et de cercles


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut SDL tuto Anomaly probleme de couleurs et de cercles
    Bonjour tout le monde !
    J'utilise le tuto ecrit par Anomaly pour m'aider dans mon applicatif. Le probleme est que je ne comprend pas bien le dernier parametre de la fonction cercle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void cercle(int cx, int cy, int rayon, int coul)
    pcq moi mes couleurs je les definit comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Color couleurRouge = {255, 0, 0};
    alors ben du coup je ne vois pas trop ce queje peux mettre comme entier dans le dernier parametre

    Merci

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Emyleet
    Bonjour tout le monde !
    J'utilise le tuto ecrit par Anomaly pour m'aider dans mon applicatif. Le probleme est que je ne comprend pas bien le dernier parametre de la fonction cercle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void cercle(int cx, int cy, int rayon, int coul)
    pcq moi mes couleurs je les definit comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Color couleurRouge = {255, 0, 0};
    alors ben du coup je ne vois pas trop ce queje peux mettre comme entier dans le dernier parametre

    Merci
    Il utilise un entier à 32 bits pour représenter les 4 canaux... Tu peux utiliser :

    Uint32 SDL_MapRGB (SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);

    pour convertir ta structure en entier... Pour le premier paramètre, utilise le champs format d'une SDL_Surface (ex: celle retourner pour la fenêtre)...

    Jc

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    As-tu lu le chapitre 4.2 de la première partie ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    Oui je viens de relire la premiere partie mais je ne vois pas ou la variable coul prend la valeur d'une couleur ...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    Ah oui si c'est bon j'ai rien dit
    coul est remplace par couleurs[C_JAUNE] par exemple
    je test

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui, et si tu ne veux pas une couleur prédéfinie tu peux utiliser SDL_MapRGB comme déjà dit dans le tuto et par JC.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    est ce normal que qd j'initialise la couleur ma fenetre d'execution ne s'ouvre pas ? Anomaly utilise la fonction initSDL(); ,j'utilise la fonction SDL_Init(); mon compilateur rale qd je test initSDL();

    voila ma fonction qui me permet de tracer mon crecle jaune :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cercle(400,300,100,couleurs[C_JAUNE]);
    et mes initialisations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     //initSDL();
       SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
       initCouleurs() ;//initialise le tableau de couleurs
       TTF_Init(); // Initialisation (peut être avant ou après SDL_Init) 
     
       gtk_init(&argc, &argv);// Initialisation de GTK+
    Je ne vois pas trop ce qui pourrait clocher
    Si vous voyez merci de m'aider

  8. #8
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Dans le tutoriel d'anomaly, elle ne fait pas seulement un SDL_Init dans sa fonction initSDL. Elle initialise entre autre la taille de la fenêtre.

    Tu as pensé à le faire ?
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    oui oui en fait j'en ai pas besoin, initSDL est une fonction qu'il a cree lui (j'avais pas vu lol) .J'utilise seuleument SDL_Init();
    Mais je ne comprends pas pourquoi je ne peut pas executer
    Merci

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    montre un code complet, minimal, compilable qui expose le problème...

    Jc

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    voila j'ai isole le pb :
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <SDL/SDL.h>//librairie graphique SDL
    #include <SDL/SDL_ttf.h>//librairie graphique SDL_ttf permettant d'ecrire du texte
    #include <gtk/gtk.h>// librairie graphique GTK toolkit
     
     Uint32 coul;//pour la couleur
     SDL_Surface* affichage;//pour le pixel
     Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);
     SDL_Event event;// variable permettant de gerer les evenements
     
     //pour les couleurs en SDL
     enum {
      C_NOIR, C_BLEU_FONCE, C_VERT_FONCE, C_CYAN_FONCE, C_ROUGE_FONCE,
      C_MAGENTA_FONCE, C_OCRE, C_GRIS_CLAIR, C_GRIS, C_BLEU, C_VERT,
      C_CYAN, C_ROUGE, C_MAGENTA, C_JAUNE, C_BLANC,
     
      NB_COULEURS
      };
     
      Uint32 couleurs[NB_COULEURS];
    void initCouleurs(void)
    {
      couleurs[C_NOIR]          = SDL_MapRGB(affichage->format, 0x00, 0x00, 0x00);
      couleurs[C_BLEU_FONCE]    = SDL_MapRGB(affichage->format, 0x00, 0x00, 0x80);
      couleurs[C_VERT_FONCE]    = SDL_MapRGB(affichage->format, 0x00, 0x80, 0x00);
      couleurs[C_CYAN_FONCE]    = SDL_MapRGB(affichage->format, 0x00, 0x80, 0x80);
      couleurs[C_ROUGE_FONCE]   = SDL_MapRGB(affichage->format, 0x80, 0x00, 0x00);
      couleurs[C_MAGENTA_FONCE] = SDL_MapRGB(affichage->format, 0x80, 0x00, 0x80);
      couleurs[C_OCRE]          = SDL_MapRGB(affichage->format, 0x80, 0x80, 0x00);
      couleurs[C_GRIS_CLAIR]    = SDL_MapRGB(affichage->format, 0xC0, 0xC0, 0xC0);
      couleurs[C_GRIS]          = SDL_MapRGB(affichage->format, 0x80, 0x80, 0x80);
      couleurs[C_BLEU]          = SDL_MapRGB(affichage->format, 0x00, 0x00, 0xFF);
      couleurs[C_VERT]          = SDL_MapRGB(affichage->format, 0x00, 0xFF, 0x00);
      couleurs[C_CYAN]          = SDL_MapRGB(affichage->format, 0x00, 0xFF, 0xFF);
      couleurs[C_ROUGE]         = SDL_MapRGB(affichage->format, 0xFF, 0x00, 0x00);
      couleurs[C_MAGENTA]       = SDL_MapRGB(affichage->format, 0xFF, 0x00, 0xFF);
      couleurs[C_JAUNE]         = SDL_MapRGB(affichage->format, 0xFF, 0xFF, 0x00);
      couleurs[C_BLANC]         = SDL_MapRGB(affichage->format, 0xFF, 0xFF, 0xFF);
    }
    /************************Fonction permettant d'afficher un pixel*********************************/
    void setPixel(int x, int y, Uint32 coul)
    {
      *((Uint32*)(affichage->pixels) + x + y * affichage->w) = coul;
    }
    /**********************************************************************************************/
    /*************************Fonction permettant d'ecrire un pixel securise************************/
    void setPixelVerif(int x, int y, Uint32 coul)
    {
      if (x >= 0 && x < affichage->w &&
          y >= 0 && y < affichage->h)
        setPixel(x, y, coul);
    }
     
    /*********************************************************************************************/
    /***********************Fonction permettant de tracer un cercle******************************/
    void cercle(int cx, int cy, int rayon, int coul)
    {
      int d, y, x;
     
      d = 3 - (2 * rayon);
      x = 0;
      y = rayon;
     
      while (y >= x) {
        setPixelVerif(cx + x, cy + y, coul);
        setPixelVerif(cx + y, cy + x, coul);
        setPixelVerif(cx - x, cy + y, coul);
        setPixelVerif(cx - y, cy + x, coul);
        setPixelVerif(cx + x, cy - y, coul);
        setPixelVerif(cx + y, cy - x, coul);
        setPixelVerif(cx - x, cy - y, coul);
        setPixelVerif(cx - y, cy - x, coul);
     
        if (d < 0)
          d = d + (4 * x) + 6;
        else {
          d = d + 4 * (x - y) + 10;
          y--;
        }
     
        x++;
      }
    }
    /**********************************************************************************************/
    int main(int argc, char *argv[])
    {
    SDL_Surface *ecran = NULL;
    int continuer = 1;
    SDL_Init(SDL_INIT_VIDEO);    
    initCouleurs() ;//initialise le tableau de couleurs
     
     
     
    SDL_WM_SetIcon(SDL_LoadBMP("sdl_icone.bmp"), NULL);// Chargement de l'icône AVANT SDL_SetVideoMode 
    ecran=SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE); // Ouverture de la fenêtre 
    cercle(400,300,100,couleurs[C_JAUNE]);
        while (continuer != 0)
        {
            SDL_WaitEvent(&event);//recuperation de l'evenement dans event
            switch(event.type)//test du type d'evenement
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN: switch (event.key.keysym.sym)
                                         {
     
                                           case SDLK_ESCAPE://appui sur la touche escape ,quitte le programme
                                           continuer = 0;
                                           break;
                                            }
                    break;
     
                }
     
     
    SDL_Flip(ecran);
            }
     
    return(0);
    }
    j'ai voulu isole le pb mais je pense que j'ai du oublier qquechose d'important qui me pose un autre pb en dehors de la fonction couleur

  12. #12
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Tu n'initialises jamais ta variable affichage, qui est utilisée dans initCouleurs() (entre autres)

  13. #13
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je regarderais plus en détail mais voilà une version qui fonctionne chez moi :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <SDL/SDL.h>//librairie graphique SDL
    #include <SDL/SDL_ttf.h>//librairie graphique SDL_ttf permettant d'ecrire du texte
     
     Uint32 coul;//pour la couleur
     SDL_Surface* affichage;//pour le pixel
     Uint32 SDL_MapRGB(SDL_PixelFormat *fmt, Uint8 r, Uint8 g, Uint8 b);
     SDL_Event event;// variable permettant de gerer les evenements
     
     //pour les couleurs en SDL
     enum {
      C_NOIR, C_BLEU_FONCE, C_VERT_FONCE, C_CYAN_FONCE, C_ROUGE_FONCE,
      C_MAGENTA_FONCE, C_OCRE, C_GRIS_CLAIR, C_GRIS, C_BLEU, C_VERT,
      C_CYAN, C_ROUGE, C_MAGENTA, C_JAUNE, C_BLANC,
     
      NB_COULEURS
      };
     
      Uint32 couleurs[NB_COULEURS];
     
    void initCouleurs(void)
    {
      couleurs[C_NOIR]          = SDL_MapRGB(affichage->format, 0x00, 0x00, 0x00);
      couleurs[C_BLEU_FONCE]    = SDL_MapRGB(affichage->format, 0x00, 0x00, 0x80);
      couleurs[C_VERT_FONCE]    = SDL_MapRGB(affichage->format, 0x00, 0x80, 0x00);
      couleurs[C_CYAN_FONCE]    = SDL_MapRGB(affichage->format, 0x00, 0x80, 0x80);
      couleurs[C_ROUGE_FONCE]   = SDL_MapRGB(affichage->format, 0x80, 0x00, 0x00);
      couleurs[C_MAGENTA_FONCE] = SDL_MapRGB(affichage->format, 0x80, 0x00, 0x80);
      couleurs[C_OCRE]          = SDL_MapRGB(affichage->format, 0x80, 0x80, 0x00);
      couleurs[C_GRIS_CLAIR]    = SDL_MapRGB(affichage->format, 0xC0, 0xC0, 0xC0);
      couleurs[C_GRIS]          = SDL_MapRGB(affichage->format, 0x80, 0x80, 0x80);
      couleurs[C_BLEU]          = SDL_MapRGB(affichage->format, 0x00, 0x00, 0xFF);
      couleurs[C_VERT]          = SDL_MapRGB(affichage->format, 0x00, 0xFF, 0x00);
      couleurs[C_CYAN]          = SDL_MapRGB(affichage->format, 0x00, 0xFF, 0xFF);
      couleurs[C_ROUGE]         = SDL_MapRGB(affichage->format, 0xFF, 0x00, 0x00);
      couleurs[C_MAGENTA]       = SDL_MapRGB(affichage->format, 0xFF, 0x00, 0xFF);
      couleurs[C_JAUNE]         = SDL_MapRGB(affichage->format, 0xFF, 0xFF, 0x00);
      couleurs[C_BLANC]         = SDL_MapRGB(affichage->format, 0xFF, 0xFF, 0xFF);
    }
    /************************Fonction permettant d'afficher un pixel*********************************/
    void setPixel(int x, int y, Uint32 coul)
    {
      *((Uint32*)(affichage->pixels) + x + y * affichage->w) = coul;
    }
    /**********************************************************************************************/
    /*************************Fonction permettant d'ecrire un pixel securise************************/
    void setPixelVerif(int x, int y, Uint32 coul)
    {
      if (x >= 0 && x < affichage->w &&
          y >= 0 && y < affichage->h)
        setPixel(x, y, coul);
    }
     
    /*********************************************************************************************/
    /***********************Fonction permettant de tracer un cercle******************************/
    void cercle(int cx, int cy, int rayon, int coul)
    {
      int d, y, x;
     
      d = 3 - (2 * rayon);
      x = 0;
      y = rayon;
     
      while (y >= x) {
        setPixelVerif(cx + x, cy + y, coul);
        setPixelVerif(cx + y, cy + x, coul);
        setPixelVerif(cx - x, cy + y, coul);
        setPixelVerif(cx - y, cy + x, coul);
        setPixelVerif(cx + x, cy - y, coul);
        setPixelVerif(cx + y, cy - x, coul);
        setPixelVerif(cx - x, cy - y, coul);
        setPixelVerif(cx - y, cy - x, coul);
     
        if (d < 0)
          d = d + (4 * x) + 6;
        else {
          d = d + 4 * (x - y) + 10;
          y--;
        }
     
        x++;
      }
    }
    /**********************************************************************************************/
    int main(int argc, char *argv[])
    {
    int continuer = 1;
     
    SDL_Init(SDL_INIT_VIDEO);  
     
     
    SDL_WM_SetIcon(SDL_LoadBMP("sdl_icone.bmp"), NULL);// Chargement de l'icône AVANT SDL_SetVideoMode 
    affichage=SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE); // Ouverture de la  fenêtre 
     
    initCouleurs() ;//initialise le tableau de couleurs
     
    cercle(400,300,100,couleurs[C_JAUNE]);
        while (continuer != 0)
        {
            SDL_WaitEvent(&event);//recuperation de l'evenement dans event
            switch(event.type)//test du type d'evenement
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN: switch (event.key.keysym.sym)
                                         {
     
                                           case SDLK_ESCAPE://appui sur la touche escape ,quitte le programme
                                           continuer = 0;
                                           break;
                                            }
                    break;
     
                }
     
     
    SDL_Flip(affichage);
            }
     
    return(0);
    }
    Tu n'initialises jamais ta variable affichage, qui est utilisée dans initCouleurs() (entre autres)
    Effectivement c'était ça

    Jc

  14. #14
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    euhhh moi je fais comme vous en ajoutant la declaration de afichage et c'est execute pas...

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juin 2006
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 126
    Points : 37
    Points
    37
    Par défaut
    ok c'est bon ca marche en fait il faut que j'initialise les couleurs juste avant mon trace de cercle et la varaible affichage du tuto c'est en fait mon ecran a moi
    Ok merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/11/2005, 15h43
  2. probleme de couleur de fond sous mozilla et pas sous IE
    Par soccernet dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 27/12/2004, 10h45
  3. probleme de couleur
    Par ellipse dans le forum OpenGL
    Réponses: 5
    Dernier message: 29/10/2004, 12h59
  4. [newbie] Probleme de couleurs
    Par Racailloux dans le forum OpenGL
    Réponses: 3
    Dernier message: 29/04/2004, 14h32

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