Pages: 1
Voilà, je suis nouveau et je veux réaliser un jeu à l'aide d'irrlicht. Mais je n'arrive pas à trouver comment faire pour bloquer le rendu à un nombre prédéfinis de FPS pour que quelque soit le PC sur lequel le jeu est installé et quelque soit le nombre de meshes à rendre (dans les limites du possible bien entendu), il aille à la même vitesse.
Hors ligne
Limiter le nombre de FPS n'est jamais une bonne idée.
Au lieu de cela, tu dois baser tes actions sur le temps : c'est beaucoup plus précis et fluide que de bêtement limiter le nombre de FPS
Concrètement tu récupères le temps écoulé entre deux frames, et tu t'en sers de coefficient pour tes vitesses, sur un PC plus lent, le personnage se déplacera par exemple de 10 unités / frame, alors que sur un PC rapide il n'en fera que 5, mais plus souvent.
Au final les deux se déplacent à la même vitesse, avec des framerates différents.
Hors ligne
Aranoth à entièrement raison, limiter le framerate n'est jamais une très bonne idée.
Pour ma par je l'ai fait dans mon projet mais parceque j'utilisais de la physique avec Ode qui est un casse tête à se niveau et que je n'arrivais pas à obtenir un rendu identique sous Linux et Windows, mais je le déconseille pour tout ce qui est action du genre courrir,marcher,déplacer un objet ou autre.Il vaut mieux utiliser une petite méthode de TimeElapsed et utiliser se coef pour tes déplacements.
Hors ligne
Merci pour ta réponse Anaroth, je n'avais pas pensé à calculer un coefficient temporel.
Pour obtenir ce coef est-ce que je peux tout simplement utiliser getFPS() et le diviser par 60?
J'ai remarqué qu'il y avait aussi les timer, se serait peut-être mieux (pour synchroniser des actions consécutives en temps "réel" ou plutôt virtuel) de lancer un timer et de déclencher l'action suivante lorsque la valeur du timer désirée est atteinte? Mais est-ce que ce temps virtuel dépend aussi des caractéristiques de la macine qui l'utilise?
Hors ligne
Hello,
Dans n'importe quel moteur qu'il soit, il est 100% déconseillé d'utiliser la méthode du getFPS pour calculer le coef.
Programme toi même ta petite méthode, Ca prend 5 minutes et c'est nettement plus propre .
Attention à ne pas confondre, Time et Time Elapsed.
Le Time dans un jeux c'est un timer tout con, et le Time Elapsed c'est le temps écoulé entre deux boucles de rendu.
Voilou bon courage,@ bientôt
Hors ligne
Salut, j'ai cherché la méthode que tu m'as dis (TimeElapsed) mais pas moyen de la trouver . Pourrais-tu me dire où la trouver ou me donner un exemple de ce à quoi tu penses pour trouver mon coef .
Merci d'avance pour ton aide.
Hors ligne
Tu peux utiliser une méthode de ce style par contre je sais pas si c'est parfait mais ça fonctionne pour moi :
f32 IrrTimeElapsed(IrrlichtDevice* device)
{
static u32 LastCycle,LoopTime;
f32 Result=0.0f;
LastCycle = device->getTimer()->getRealTime() - LoopTime;
LoopTime = device->getTimer()->getRealTime();
Result = (LastCycle/1000.0f);
if (Result > 1.0f){Result=1.0f;}
if (Result < 0.0f){Result = 0.0f;}
return Result;
}
Attention à ne l'appeler qu'une seule est unique fois dans ta boucle sinon tu fausses les calculs .Ton coef devant être le même pour tout tes objets.
Hors ligne
Désolé pour le retard mais je n'est pas pu accéder à internet avant. Dès que je peux me remettre sur irrlicht j'essaie ton code et je testerais mon projet sur deux pc differents pour voir si ça marche avec moi. Merci pour ton aide Copland.
Hors ligne
Tu as de la chance d'avoir plus de 60FPS, moi je suis bloqué à 60, parfois 61 alors qu'il m'en faut beaucoup plus.
Je vois pas trop a quoi sa te servirait mais bon,...
Hors ligne
gp2mv3 :
Tu as de la chance d'avoir plus de 60FPS, moi je suis bloqué à 60, parfois 61 alors qu'il m'en faut beaucoup plus.
VSync forcée ?
Hors ligne
VSync forcée?
Je comprends pas bien...
Hors ligne
la synchronisation verticale de l'écran bloque le framerate (60fps <-> 60Hz)
Il faut la désactiver.
Mais bon elle l'est par défaut sur irrlicht (c'est dans le createDevice)
Par contre si ton appli est pas en fullscreen ca peut venir de là (à confirmer)
Hors ligne
Ca dépend de la config de ta carte.
Dans le nVidia Panel (et sans doute dans l'équivalant chez ATI), tu verras une option VSync et si elle est "Forcer activée" alors peu importe la config dans Irrlicht, tu ne dépasseras pas 60fps (ou 70, selon ton écran)
Hors ligne
Et comment on le désactive dans Irrlicht?
Les cartes graphiques sur lesquels j'ai essayé sont des ATI Radeon 700 mobility et une 1500 sur un fixe je pense.
Je suis pas sur des modèles.
Mais donc, sa viendrait de la carte graphique c'est sa?
Merci d'avance.
Gp2mv3
Hors ligne
Si même en la désactivant dans Irrlicht (ce qui est fait par défaut) tu restes à 60 FPS, c'est que ta carte graphique force l'utilisation de la VSync...
La seule solution est de changer les options de ta carte graph et de mettre sur "Laisser l'application choisir" (ou équivalent chez ATI)
De toute façon, à chaque fois que ton FPS est bloqué aux alentours de la fréquence de rafraichissement de l'écran, tu peux être sur que c'est la VSync
Hors ligne
ha ok, je retiendrais sa pour la prochaine fois.
Je l'ai désactivé et maintenant il monte à 181FPS.
Merci beaucoup.
Gp2mv3
Hors ligne
Pages: 1