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

zaraki21 Messages postés 31 Date d'inscription lundi 2 juin 2008 Statut Membre Dernière intervention 22 avril 2011 - 24 juil. 2009 à 11:01
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009 - 7 août 2009 à 16:32
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

SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
7 août 2009 à 12:58
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.
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
7 août 2009 à 16:29
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
0
Kotomine Messages postés 112 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 5 novembre 2009
7 août 2009 à 16:32
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
0
Rejoignez-nous