Bonjour,
je suis en train d'apprendre à me servir d'OpenGL ES et j'ai un petit problème (surement tout con) que je n'arrive pas à résoudre car je ne le comprends pas. J'ai créé 3 objets simples (parallélépipède rectangles) et je me balade au milieu d'eux via les touches (z -> avancer, s -> reculer, q -> gauche, d -> droite). pour faire simple, je simule un humain qui se balade entre des immeubles (il reste à la meme hauteur y). Pour chaque déplacement, je positionne la caméra grâce à ugluLookAtf().
Mon problème est que quand j'avance, au bout d'un certain nombre de fois, la scene visualisée change radicalement comme si j'avais effectué une transformation.
Il semble que le probleme ne vienne pas de ma prog mais d'autre chose. En effet, j'ai repris le tutorial 13 de zeuscmd.com et j'y ai ajouté quelques lignes de code pour pouvoir me balader dans la scene. J'ai exactement le meme probleme avec ce code : si je suis en déplacement parallele a un objet (par exemple si je le longe), quand j'arrive à la fin de l'objet (face back), c'est là qu'il y a un probleme d'affichage.
je ne sais pas si c'est un probleme du à la librairie openGL ES que j'utilise (Vincent 1.0.0) ou autre chose...
Je ne sais pas si ca va aider, mais c'est toujours bon d'essayer...
Essaye de rajouter glPushMatrix juste avant gluLookAtf() et glPopMatrix() juste apres ta fonction Draw(); Si ca ne marche pas, ca doit surement etre un probleme relier a la camera, pourtant elle me semble bien positionner...
Ou peut etre ton probleme vien t'il du fait que le "near plane" est trop loin de ta camera et il coupe les objects lorsceque tu approche trop rapidement. Essaye une valeur de 1.0 pour le near plane et 1000 pour le far plane. Bien sur si tes object font 3000 unité en largeur par example, joue avec ces valeurs a ta guise, donc dans ce ca je conseillerais simplement un near plane de 1 et un far plane de 10000. Voila.
j'ai essayé les deux trucs dont tu m'as parlé mais aucun n'a eu d'effet...
J'ai remarqué une chose assez bizarre aussi : le sol qui a comme coordonnées ((-50,0,10) ; (-50,0,-100) ; (60,0,10) ; (60,0,-100)) apparait au loin. Il semble qu'il soit vers z=-90 !! alors là, je ne vois pas du tout pourquoi...
En OpenGL, je crois que y est l'axe de la hauteur, et z celui qui definit la distance, peut etre a tu simplement melanger les 2? Loarsque j'exporte un model de 3ds max dans un de mes projets, je doit inverser mon y et mon z, puis ajouter le signe "-" en avant de un des 2, je me rapelle plus lequel... Mais si ton models est fait a la main ne t'inquite pas pour ca.
Si tu veut, tu peut m'envoyer ton project dans un .zip avec l'executable, comme ca je pourrais mieux comprendre le probleme.
Je ne pense pas que cela puisse etre le probleme car mon exemple etait vraiment trivial. Je pensais plutot que c'était un bug des bibliotheques utilisées (implementation Fincent d'OpenGL ES + bibliothèque UG ). Pour le vérifier, j'ai essayé la même chose avec une autre implémentation d'openGL ES (Rasteroid) et ça à l'air de ne pas avoir ce problème. Je ne sais pas encore où est exactement le problème mais pour l'instant, j'ai quelque chose qui fonctionne.