begin process at 2012 05 29 19:59:37
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

OpenGL

 > 

Problème avec glReadPixels


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec glReadPixels

samedi 19 août 2006 à 22:20:23 | Problème avec glReadPixels

Turok

Je débute actuellement avec OpenGL et j'essaye de faire un jeux de serpend. Pour la collision avec les éléments du décord je veux utiliser glReadPixels, et lorsque il y a collision la fonction return 1 et le programme se quitte. Problème dés que je lance le programme, il quitte comme s'il y avait une collision mais je ne comprend pas pourquoi.
Voici la fonction :

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 :
           X = 0.0f; Y = +0.04f;
           break;
     
         case 2 :
           X = 0.0f; Y = -0.04f;
           break;
     
         case 3 :
           X = -0.04f; Y = 0.0f;
           break;
     
         case 4 :
           X = +0.04f; Y = 0.0f;
           break;
    }

    if(X != 0.0f || Y != 0.0f)
    {
        GLubyte tab[1][1][1];
        glReadPixels(*it + X, *(it+1) + Y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, tab);
        if (tab[0][0][0] != 0){return 1;}
    }


    Nibble.pop_back();
    Nibble.pop_back();
    Nibble.push_front(*(it+1) + Y);    
    Nibble.push_front(*it + X);

    return 0;

}

Turok
lundi 21 août 2006 à 09:26:37 | Re : Problème avec glReadPixels

luhtor

Utiliser glReadPixels est très mauvais pour les performances. Et pour la gestion des collisions, je pense pas que ce soit une très bonne chose. Sinon méfie toi des comparaisons d'égalité de floatant:
"if (tab[0][0][0] > 0.001f)"


lundi 21 août 2006 à 12:53:29 | Re : Problème avec glReadPixels

Turok

Lorsque je fais "if (tab[0][0][0] > 0.001f)" il ne détecte rien.
Lorsque je fais "if (tab[0][0][0] > 0.0f)" il détecte une sortie d'écran, mais pas sa queue, je ne comprend pas.

Et sinon pour en revenir aux performances, pense-tu que se soit moins rapide de tester un seul pixel par frame pour détecter une collision ou de comparer les coordonnées de tous les objets de l'écran?

Encore une question pi je t'embête plus, j'ai remarqué qu'avec OpenGL même si je ne met pas de delay le processeur  ne travaille pas à fond contrairement  à quand j'utilisait SDL pour l'affichage.  Est-ce c'est par rapport à la carte graphique?

Turok
mardi 22 août 2006 à 00:46:15 | Re : Problème avec glReadPixels

luhtor

Réponse acceptée !
L'idéal c'est un processeur qui tourne à 0% ou presque. Si ton proc tourne a 100% c'est que ton programme est mal fais et les perfs seront pourris. Mais dans ton cas, le simple fait d'avoir la synchro vertical de windows, suffit pour limiter la charge cpu, puisque le taux de rafraichissement est bridé.

Sinon une carte video n'est pas faite pour fournir l'état des pixels, donc ces fonctions sont TRES lentes. Une gestion de collisions se fait sur un processeur. Car pdt que ton proc bosse, la carte video bosse également (si ton prog est correct). Et de plus, je doute qu'un seul pixel soit nécessaire pour la collision.
mardi 22 août 2006 à 10:45:35 | Re : Problème avec glReadPixels

Turok

Ok je te remercie. De toute facon puisque ça ne marche pas je suis forcé de comparer les coordonnées de chaque objet.

Turok


Cette discussion est classée dans : case, it, 0f, nibble, glreadpixels


Répondre à ce message

Sujets en rapport avec ce message

GESTION CLAVIER SDL [ par Batman60 ] voici un bout de code qui  sert à me déplacer dans une scène 3D opengl ,le problème c'est qu'il faut à chaque fois appuyer sur la touche pour ce dépla affichage d'une grande grille [ par gillescpp ] Bonjour J'ai un probleme avec opengl J'ai ecris un petit code qui génère une grille en triangles et les affiche si on le lui demande. Il possede auss Eclairage en OpenGL ? IMPORTANT ! [ par bubbless ] Bonjour à tous ! Je réalise actuellement un programme avec une interface en OpenGL, et, j'ai un problème ! Je voudrais mettre des images en fond d'écr Fond d'écran en OpenGl (entre autres...) [ par bubbless ] Bonjour à tous ! Je réalise actuellement un programme avec une interface en OpenGL, et, j'ai un problème ! Je voudrais mettre des images en fond d'écr fin de lecture avec TMediaPlayer [ par Tymk ] J'ai des problèmes avec BCB pour détecter la fin de lecture avec un TMediaPlayer. J'utilise la propriété OnNotify mais certainement pas comme il faut comment faire un degrader de couleur avec Glut [ par Jarod1980 ] Salut,J'aimerais savoir si quelqu'un sait comment faire des degradés de couleurs avec Glut. Est ce qu'il existe des tutoriaux sur le Net?En fait, j'ai Multi-Thread [ par cjiwank ] Quelqu'un peut-il me dire pourquoi je compile ce projet (VC++ 6) j'obtient tjs une erreur " error C2665: 'AfxBeginThread' : none of the 2 overloads ca InvalidateRect en boucle. [ par tintin72 ] Bonjour,Je voudrais envoyer plusieurs fois le message InvalidateRect lors de l'appuie sur une touche du clavier (case WM_KEYDOWN)  pour provoquer à ch Mystère DialogBox..... [ par Gendal67 ] Bonjour à tous....Après avoir cherché sur le forum en vain...(j'ai trouvé des problêmes ananlogues mais pas de réponses qui aurait pu m'aider je crois Le getch() ne fonctionne pas comme je veux [ par kobee12 ] Bonjour à tous,j'ai un ch'tit programme avec une fonction de saisie. J'utilise la fonction getch() pour récupérer chaque caractère que l'on tape.J'uti


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,196 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales