Translation Objet OpenGL à partir de données d'un fichier

Signaler
Messages postés
31
Date d'inscription
lundi 2 juin 2008
Statut
Membre
Dernière intervention
22 avril 2011
-
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009
-
Bonjour,

je travaille actuellement sur une application en C++/OpenGL/GLUT. Je desire faire se déplacer un objet 3D avec des données issues d'un fichier texte. Le fichier texte contient une liste de coordonnées x, y, z.
J'ai realisé une fonction qui recupère ces données et modifie les coordonnées de l'objet et j'appelle cette fonction dans la methode glutIdleFunc. Le problème est que cela ne fonctionne pas, l'objet ne bouge pas et je pense que cela vient du fait qu'il y ait une boucle dans ma fonction qui est appelée par glutIdleFunc.

Donc si quelqu'un a une idée, je suis preneur. Merci.

Je mets le code de ma fonction :

void translation(){

file = fopen("example.txt","rb");
if(file != NULL){
while(fgets(str,SIZE_FILE_LINE,file)!=NULL){
//recup des donnees
sscanf(str,"%f %f %f",&x,&y,&z);

//recup du nouveau point
newX=x; //recup de la nouvelle valeur de x
newY=y; //recup de la nouvelle valeur de y
newZ=z; //recup de la nouvelle valeur de z

//modif de la position de l'objet 3D
ballX+=(newX-ballX);
ballY+=(newY-ballY);
ballZ+=(newZ-ballZ);

glutPostRedisplay();

}

}
}

Dans le main : glutIdleFunc(translation);

3 réponses

Messages postés
212
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
23 juin 2011

Salut,

je ne vois pas de problème, mais je suis curieux de savoir si tu as trouvé une réponse à ta question.

Cordialement,
Sébastien.
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009

Je sais pas ce que fait glutIdleFunc .. mais si c'est appelée souvent, il y a un truc à ne pas faire là ...
tu scannes ton fichier en permanance si je me trompe pas.
Paie tes accès disques inutiles !
Fais une fonction loadPositions(const char *fname) qui va charger les differentes positions de ton objet dans un tableau

je te conseille de faire une fonction drawScene() comme il se doit , sauf que la, tu va passer un facteur à la con (un temps symbolique lié à ton objet)

drawScene(int dt){
drawbidules();
drawball(dt);
drawtrucs();
}

et dans drawball(), tu déduis la position de ta balle en fonction du temps.. par exemple

#define MAX_FRAMES 300
drawball(int dt){
point p = tablPositions[ dt/MAX_FRAMES];
}

Pour moi, en 3D, on doit déja calculer avant de produire un élément de scene à envoyer a la carte graphique.

; I'm just keeping the hopeless cross to increase the meaninglessness
Messages postés
112
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
5 novembre 2009

Et ... sinon (rire à part :p)

ballX+=(newX-ballX);
ballY+=(newY-ballY);
ballZ+=(newZ-ballZ); 


ca donne

ballX=newX;
ballY=newY;
ballZ=newZ; 


:D


; I'm just keeping the hopeless cross to increase the meaninglessness