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 :

Problème avec glReadPixels


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Par défaut Problème avec glReadPixels
    Salut,
    Débutant en OpenGL, j'essaye de réaliser un jeux de serpend tout bete. Le problème c'est que je bloque sur la détection de collision où j'utilise glReadPixels mais qui ne marche pas.


    Pour le serpend, j'utilise le conteneur deque ou je stocke les coordonnées X,Y de chaque bout de queue (1bout de queue = 1pixel/1).

    Voici une partie du code :

    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
    bool moveNibble(deque<float> &Nibble, int direction)
    {
    	deque<float>::iterator it;
    	it=Nibble.begin();
     
    	float X=0.0f,Y=0.0f;
     
    	switch(direction)
    	{
         	case 1 :                             //déplacement vers le haut
               X = 0.0f; Y = +0.04f;
               break;
     
         	case 2 :                             //déplacement vers le bas
               X = 0.0f; Y = -0.04f;
               break;
     
         	case 3 :                             //déplacement vers la gauche
               X = -0.04f; Y = 0.0f;
               break;
     
         	case 4 :                             //déplacement vers la droite
               X = +0.04f; Y = 0.0f;
               break;
        }
     
            //pour détecter une collision (collision si pixel blanc)
    	float tab[1];
    	glReadPixels(*it + X, *(it+1) + Y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, tab);
            if (tab[0] == 1.0f){return 1;}
     
     
        //pour déplacer la queue
        Nibble.pop_back();
        Nibble.pop_back();
        Nibble.push_front(*(it+1) + Y);     
        Nibble.push_front(*it + X);
     
    	return 0;
     
    }

    Merci d'avance.

  2. #2
    Expert confirmé

    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 : 45
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Pour répondre à la question, déjà ici il y a un problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	float tab[1];
    	glReadPixels(*it + X, *(it+1) + Y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, tab);
    Ta déclaration de tab est fausse, ce que tu veux avoir c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    unsigned char tab[3];
    	glReadPixels(*it + X, *(it+1) + Y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, tab);
    Et il faut tester chaque couleur. En effet les options que tu passes sont

    GL_RGB : on a trois couleurs
    GL_UNSIGNED_BYTE : chaque couleur est un unsigned byte...

    Enfin, je ne pense pas que ta méthode de faire ce programme est correct. Il est plus intelligent de bien séparer monde rendu (ce qui est dessiné) et monde du jeu (ce qui représente le jeu).

    Toute la logique du jeu (collision, IA, gestion des points) se trouve dans le monde du jeu et le rendu en est indépendant.

    Ceci permet de passer à un serpent en 3D si on souhaite amélioré l'affichage sans toucher au code du jeu...

    Jc

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Par défaut
    Ok, merci je crois que je vai revenir à une gestion plus classique des collisions.

Discussions similaires

  1. [jogl]Problème avec glReadPixels
    Par GLDavid dans le forum OpenGL
    Réponses: 8
    Dernier message: 13/01/2009, 15h20
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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