cs_Turok
Messages postés78Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention 3 décembre 2011
-
19 août 2006 à 22:20
cs_Turok
Messages postés78Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention 3 décembre 2011
-
22 août 2006 à 10:45
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;}
}
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 22 août 2006 à 00:46
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.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 21 août 2006 à 09:26
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:
cs_Turok
Messages postés78Date d'inscriptionmardi 30 décembre 2003StatutMembreDernière intervention 3 décembre 2011 21 août 2006 à 12:53
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?