#0 

27-08-2009 17:48:18

Froyok
Petit nouveau
Lieu: Le Mans, 72
Date d'inscription: 27-08-2009
Messages: 4
Site web

Bonjour à tous, en nouvel utilisateur d'irrlicht que je suis, et après avoir passé quelque tutoriaux entre mes doigts pour appréhender irrlicht, des questions me viennent à l'esprit :

Je travaillait avant avec la SDL et OpenGl pour créer un moteur 3D, devant la tâche, j'ai décidé de passer à irrlicht. Sous la SDL j'avais un code qui me permettait de réguler le framrate et le temps écouler afin de gérer les animations correctement. Je me suis donc dirigé vers cette méthode pour l'adapter à irrlicht. Sous la SDL cela reposait sur la fonction qui récupérait le temps écoulé en millisecodnes depuis la création de l'application.
Existe-t'il sous irrlicht une méthode pareille/identique ?

J'ai bien trouvé les "timer" dans la doc ( http://irrlicht.sourceforge.net/docu/cl … timer.html ) mais cela ne semble pas correspondre.

Le code sous la SDL ressemble à cela :

Code:

last_time = SDL_GetTicks();

//Boucle de rendu
        start_time = SDL_GetTicks();

        current_time = SDL_GetTicks();
        elapsed_time = current_time - last_time;
        last_time = current_time;

//dessin, ou affichage/calcul de la scène

        stop_time = SDL_GetTicks();
        if ((stop_time - last_time) < time_per_frame)
        {
            SDL_Delay(time_per_frame - (stop_time - last_time));
        }

Donc SDL_GetTicks() renvois un int avec le temps en millisecondes écoulé, et time_per_frame est la limite en fps.
Time ellapsed le temps écoulé, ce qui permet de réguler la vitesse de mouvement ingame.

Dernière modification par Froyok (27-08-2009 17:50:43)

Hors ligne


#1 

27-08-2009 18:15:45

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 902
Corrections: 2
Site web

j'ai pas mon code sous le nez mais ses a peut prêt ça :

Code c++ :


static float time_elapsed = 0.f;
if(time_elapsed - device->getTimer()->getRealTime() > x*1000)// ou x est en second sinon *1000 ~= ms->second
    time_elapsed = device->getTimer()->getRealTime();



et tu update tes animations en fonction de se time_elapsed la diference avec ton code ses qu'il "bloc" le fps, le mien update l'animation en fonction de du temps donc tu garde un bon fps ( et sa evite par ailleur d'aoir des animation lent si le fps en < 60 )

Dernière modification par Magun (27-08-2009 18:16:18)

Hors ligne


#2 

28-08-2009 02:18:48

Froyok
Petit nouveau
Lieu: Le Mans, 72
Date d'inscription: 27-08-2009
Messages: 4
Site web

Magun a écrit:

( et sa evite par ailleur d'aoir des animation lent si le fps en < 60 )

Merci pour ces informations ! wink
Par contre je ne suis pas sur d'avoir bien compris ce que tu souhaitais dire : c'est normal que l'animation soit "lente" da façon inférieure à 60 fps, puisque justement, avec le manque de frames le mouvement sera saccadé. Mais même si le mouvement est saccadé, l'objet se déplacera toujours à la même vitesse et dans le même sens. Ma méthode (et encore, je n'ai rien inventé) limite les fps en plus afin de gérer un rendu type.

Hors ligne


#3 

28-08-2009 11:18:04

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 902
Corrections: 2
Site web

non si tu utilise des animation 3d elle ne seras pas sacccader mais juste rendue en fonction du temps et nom du fps, et que ma methode permet d'avoir +60 fps sans que cela n'affect la vitesse de l'animation, mais ma fois tu peut tout a fait utiliser ta methode dans irrlicht, cela t'oblige d'avoir une dll suplementaire ... sinon tu peut utiliser la mienne pour limminter le fps en utilisant device->sleep(u32); ou u32 seras le temps en ms

tu m'excuseras j'ai pas le temps de regarder la doc ou mais code pour verifier se que je dit, te j'ai pas trop la tête a sa ^^
je réinstall mais  os ....

Dernière modification par Magun (28-08-2009 11:19:01)

Hors ligne


#4 

28-08-2009 15:40:15

Froyok
Petit nouveau
Lieu: Le Mans, 72
Date d'inscription: 27-08-2009
Messages: 4
Site web

Magun a écrit:

non si tu utilise des animation 3d elle ne seras pas sacccader mais juste rendue en fonction du temps et nom du fps, et que ma methode permet d'avoir +60 fps sans que cela n'affect la vitesse de l'animation, mais ma fois tu peut tout a fait utiliser ta methode dans irrlicht, cela t'oblige d'avoir une dll suplementaire ... sinon tu peut utiliser la mienne pour limminter le fps en utilisant device->sleep(u32); ou u32 seras le temps en ms

tu m'excuseras j'ai pas le temps de regarder la doc ou mais code pour verifier se que je dit, te j'ai pas trop la tête a sa ^^
je réinstall mais  os ....

Ok, maintenant je vois ce que tu veux dire ! wink
Même avec ma méthode j'anime mes personnage sur le temps et non au niveau des fps !
Même si derrière j'impose une limitation. C'est vrai que la question peut se poser de savoir si c'est vraiment utile...

Par contre, pourquoi est-ce que j'aurais une dll supplémentaire avec irrlicht ? Tu parles de la sdl en disant cela ? Si oui, c'est tout l'intérêt de ce topic ou je demande s'il existe une fonction similaire à celle de la sdl, justement pour ne pas avoir à utiliser la sdl !
Néanmoins, avec tes deux réponses je vais pouvoir progresser ! Merci beaucoup !

Hors ligne


#5 

28-08-2009 20:07:59

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 902
Corrections: 2
Site web

oui je parlais de la dll de la sdl wink

Néanmoins, avec tes deux réponses je vais pouvoir progresser ! Merci beaucoup !

pas de soucis wink

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
Analysé par
872 membres
1423 sujets
11109 messages
Dernier membre inscrit: Glider
7 invités en ligne
Aucun membre connecté
RSS Feed

[ Générée en 0.072 sec., 10 requêtes exécutées ]