Jump to content
  • Advertisement
Sign in to follow this  
Gasimzada

how to implement stable timestep for systems (Bullet Physics and SFML for time) when they are processed through a list.

This topic is 2150 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have integrated Bullet physics to my engine and I am having trouble with the timestep. I have read the "Fix your timestep" and other articles regarding this issue, but none of them help me with my design. This is my update function:

int SFMLWindow::run() {
        bool bRunning = true;
        sf::Clock clock;
        sf::Time oldTime = clock.getElapsedTime();
        sf::Time deltaTime;
        while(bRunning) {
            
            sf::Time currentTime = clock.getElapsedTime();
            deltaTime = currentTime - oldTime;
            currentTime = oldTime;
            
            mRenderWindow.clear();
            mRenderWindow.pushGLStates();
            mCurrentState->update(deltaTime.asSeconds());
            mRenderWindow.popGLStates();
            
            mRenderWindow.display();
        }
        return 0;
    }

The state holds all the systems and passed the "deltaTime.asSeconds()" parameter to the update function of these systems. And here is the bullet physics update function:

   void BulletPhysicsSystem::update(double dt) {
        mWorld->stepSimulation(dt,10.0);
    }

The problem is, the sphere I have in my scene goes with a speed of light to the ground. What should I add or do?

Edited by Gasimzada

Share this post


Link to post
Share on other sites
Advertisement

It looks like Alvaro already spotted your problem, but I figured I'd add to the conversation anyway:

 

How 'smart' is the bullet physics update call, does it automatically break up the update if the delta passed in is too large?  I'm assuming that is what the 'fix your timestep' articles you mention are talking about?

Share this post


Link to post
Share on other sites

Yes thats what it does. Here is the wiki from Bullet Physics:

 

 

 

It's important that timeStep is always less than maxSubSteps*fixedTimeStep, otherwise you are losing time. Mathematically,

timeStep < maxSubSteps * fixedTimeStep

When you are calculating what figures you need for your game, start by picking the maximum and minimum framerates you expect to see. For example, I cap my game framerate at 120fps, I guess it might conceivably go as low as 12fps.

 

After you asked the question, I couldn't stop myself from digging into the source code of Bullet:

if (maxSubSteps)
	{
		//fixed timestep with interpolation
		m_fixedTimeStep = fixedTimeStep;
		m_localTime += timeStep;
		if (m_localTime >= fixedTimeStep)
		{
			numSimulationSubSteps = int( m_localTime / fixedTimeStep);
			m_localTime -= numSimulationSubSteps * fixedTimeStep;
		}
	} 

So it looks like the "semi-fixed timestep" from the article I was referring to.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!