Historique des modifications - Message

Message #10644

Sujet: Test de gravité - Irrlicht + Newton


Type Date Auteur Contenu
Dernière modification 11-08-2012 14:35:18 johnplayer
Dans ta boucle de rendu tu dois faire un NewtonUpdate(...). Regarde dans la doc pour le paramètrage.

Je te passe un bout de code pour un framerate libre (pas de vsync):
void Systeme::rendu()
{
    /// variables pour le chronomètrage de l'execution des frames
    mTimeElapsed = 0;
    u32 startTime = 0;
    /// variable pour le rafraichissement de la physique
    u32 lastTime = 0;

    /// entrée dans la boucle
    while(mDevice->run())
    {
        /// on enregistre le temps de départ de la frame
        startTime = mDevice->getTimer()->getTime();
        /// update la physique
        if( startTime > (lastTime + TIME_STEP_MS) )
        {
            NewtonUpdate(mWorld, TIME_STEP_S );
            lastTime = startTime;
        }
        /// commence l'update de l'écran
        mDriver->beginScene(true, true, mBackgroundColor);
        /// dessine la scène
        mSmgr->drawAll();
        /// fin de l'update de l'écran
        mDriver->endScene();
        /// on calcule et enregistre le temps d'éxécution de la frame
        mTimeElapsed = mDevice->getTimer()->getTime() - startTime;

    #ifdef _DEBUG
    stringw str = L"My Game ["; str += mDriver->getName();str += "] ";
    str += "Temps de frame: "; str += mTimeElapsed; str += " ms";
    mDevice->setWindowCaption(str.c_str());
    #endif
    }
}
Création du message 11-08-2012 14:31:54 johnplayer
Dans ta boucle de rendu tu dois faire un NewtonUpdate(...). Regarde dans la doc pour le paramètrage.

Je te passe un bout de code pour un framerate libre (pas de vsync):
void Systeme::rendu()
{
    /// variables pour le chronomètrage de l'execution des frames
    mTimeElapsed = 0;
    u32 startTime = 0;
    /// variable pour le rafraichissement de la physique
    u32 lastTime = 0;

    /// entrée dans la boucle
    while(mDevice->run())
    {
        /// on enregistre le temps de départ de la frame
        startTime = mDevice->getTimer()->getTime();
        /// update la physique
        if( startTime > (lastTime + TIME_STEP_MS) )
        {
            NewtonUpdate(mWorld, TIME_STEP_S );
            lastTime = startTime;
        }
        /// commence l'update de l'écran
        mDriver->beginScene(true, true, mBackgroundColor);
        /// dessine la scène
        mSmgr->drawAll();
        /// fin de l'update de l'écran
        mDriver->endScene();
        /// on calcule et enregistre le temps d'éxécution de la frame
        mTimeElapsed = mDevice->getTimer()->getTime() - startTime;

    #ifdef _DEBUG
    stringw str = L"My Game ["; str += mDriver->getName();str += "] ";
    str += "Temps de frame: "; str += mTimeElapsed; str += " ms";
    mDevice->setWindowCaption(str.c_str());
    #endif
    }
}

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
158 invités en ligne
membre en ligne: -
RSS Feed