01net    Web


Actuellement en ligne : 1001 Utilisateurs dont 67 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > C/C++
> OpenGL: problème de collision
Auteur
Message
 
<     1       >
esselfe
  Je calcul donc je suis relativ
  :-)
      ?   @     Posté le 11/04/2006 19:20:59  
Voter pour ce message
Salut!

Voilà, j'essais de faire un aller-viens avec une sphère.
La limite conditionnelle ne semble pas s'imposer dans le déroulement du programme... En gros, la balle devrait s'arr^ter et retourner de bord, mais elle continue! Voici un bout de code représentant le problème:

#include <GL/glut.h>

bool flagballDown =false;

struct ballHandle{
// x and y positions
float px, py;
} bH1 ={0.0,0.0};

void mk_ball(float px, float py){
glPushMatrix();
glColor3f(1.0,1.0,1.0);
glTranslated(px,py,-4.0);
glutSolidSphere(0.025,64,64);
glPopMatrix();
}

static void display(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0,0,0,0);

mk_ball(bH1.px, bH1.py);

// Voici la partie déreglée :fume:
if (flagballDown==false){
bH1.py +=0.05;
}
if(bH1.py==1.75){
flagballDown =true;
}
if (flagballDown==true){
bH1.py -=0.05;
}
if(bH1.py==-1.75){
flagballDown =false;
}

glutSwapBuffers();
}

static void key(unsigned char key, int x, int y){
switch (key) {
case VK_RETURN:
case VK_ESCAPE:
exit(0);
break;
}
glutPostRedisplay();
}

static void idle(void){
glutPostRedisplay();
}

static void resize(int width, int height){
const float ar = (float) width / (float) height;
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity() ;
}

int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitWindowSize(500,500);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("TestBalle");

glutReshapeFunc(resize);
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idle);

glutMainLoop();

return 0;
}


PS: J'ai winXP et dev-c++ avec un devpack glut.3.7.6+.DevPak (http://www.nigels.com/glt/devpak/) :hello:
icare_olivier
  arriere, band de newbies ^^
  :-)
      ?   @     Posté le 12/04/2006 09:34:40  
Voter pour ce message
Personellement, j'aurrais codé ca comme ca :

if (flagballDown)
bH1.py +=0.05;
else
bH1.py -=0.05;

if(bH1.py*bH1.py>=1.75*1.75)
flagballDown = !flagballDown;


nop ?

Ton problème est qd meme bizzarre...déja, c'est toujours mieux de mettre des ">=" ou "<=" dans ce genre de cas, bien que 1.75 soit multiple de 0.05 ... pour si jamais tu veux un jour changer le '0.05', en oubliant que la valeur doit etre multiple de 1.75 si tu veux que la condition soit réalisée
-->Message édité par icare_olivier le 12/04/2006 09:35:46<--
<     1       >

01net > Forum de 01net > Programmation et développement > C/C++
> OpenGL: problème de collision

Aller à :

Page générée en : 0.158s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Google Chrome
La récdaction de 01net a testé pour vous la première version du navigateur signé Google. Cliquez ici !
Jeux
Nouveauté : Aidez une tortue héroïque à parcourir trois fabuleux mondes de jeux regorgeant de détails.