|
|
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
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/)
|