#0 

22-10-2007 11:41:50

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#1 

22-10-2007 13:34:31

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

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


#2 

22-10-2007 20:47:59

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#3 

23-10-2007 13:11:48

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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?


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#4 

23-10-2007 19:57:44

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

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 wink.
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 wink


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#5 

24-10-2007 13:23:58

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

Salut, j'ai cherché la méthode que tu m'as dis (TimeElapsed) mais pas moyen de la trouver sad. Pourrais-tu me dire où la trouver ou me donner un exemple de ce à quoi tu penses pour trouver mon coef big_smile.

Merci d'avance pour ton aide.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#6 

24-10-2007 13:34:20

firnafin
Abonné
Date d'inscription: 31-03-2007
Messages: 150

normal il n' y en a pas.

Hors ligne


#7 

24-10-2007 19:00:11

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Tu peux utiliser une méthode de ce style par contre je sais pas si c'est parfait mais ça fonctionne pour moi wink :
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 smile.Ton coef devant être le même pour tout tes objets.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#8 

13-11-2007 13:29:21

johnplayer
Habitué
Date d'inscription: 30-09-2007
Messages: 431

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.


core i7 4970K @ 4GHz - 32GB ddr3 19200(2400MHz) - ssd samsung 840 evo 250GB - GTX1080Ti (4K) - Cooler master storm stryker blanc.
"L'alcool, c'est comme Activia, c'est actif à l'intérieur et ça se voit à l'extérieur."

Hors ligne


#9 

13-11-2007 18:44:19

gp2mv3
Abonné
Date d'inscription: 27-06-2007
Messages: 103
Site web

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


#10 

14-11-2007 13:49:39

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

gp2mv3 a écrit:

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


#11 

15-11-2007 18:42:24

gp2mv3
Abonné
Date d'inscription: 27-06-2007
Messages: 103
Site web

VSync forcée?
Je comprends pas bien...

Hors ligne


#12 

15-11-2007 20:24:12

izguit
Administrateur
Lieu: 127.0.0.1
Date d'inscription: 14-09-2006
Messages: 306
Site web

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)


Athlon 64 3000+ // 1Go RAM // Geforce 6600GT 128Mo
Turion 64 X2 // 1Go RAM // ATI X1250

Hors ligne


#13 

16-11-2007 15:30:06

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

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


#14 

16-11-2007 15:39:36

gp2mv3
Abonné
Date d'inscription: 27-06-2007
Messages: 103
Site web

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


#15 

17-11-2007 02:01:21

Aranoth
Abonné
Lieu: Toulouse
Date d'inscription: 25-09-2006
Messages: 242
Site web

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


#16 

18-11-2007 18:27:32

gp2mv3
Abonné
Date d'inscription: 27-06-2007
Messages: 103
Site web

ha ok, je retiendrais sa pour la prochaine fois.
Je l'ai désactivé et maintenant il monte à 181FPS.
Merci beaucoup.

Gp2mv3

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
8 invités en ligne
Aucun membre connecté
RSS Feed

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