void DPhysicsEngine::update(float dt)
{
static float timeStep = 1.0f/60.0f;
static int32 velocityIters = 6;
static int32 positionIters = 2;
m_pWorld->Step(timeStep, velocityIters, positionIters);
}
Verujem da se framerate sa ovim kodom menja i u zavisnosti od brzine masine tako da mora da se popravi...
Probao sam za timeStep da stavim dt (da timestep bude varijabilan) ali to opet nije dovelo do konstantnog framerate. Cudi me da nije konstantan u ovom slucaju jer je u Release dt manje i onda se, verovatno, brzine i ostali parametri mnoze sa dt u Step funkciji tako da bi pozivanje update cesce sa manjim dt (Release) bilo ekvivalentno redjim pozivanjem update sa vecim dt (Debug). Ali, izgleda da to ne radi tako...
Onda sam nasao resenje na netu:
DPhysicsEngine::DPhysicsEngine(void)
{
m_pWorld = new b2World(toPhysics(sf::Vector2f(0, 9.81f)));
m_pWorld->SetAutoClearForces(false);
}
void DPhysicsEngine::update(float dt)
{
float timeStep = 1.0f/60.0f;
static int32 velocityIters = 6;
static int32 positionIters = 2;
static float timePassed = 0;
timePassed += dt;
while(timePassed > timeStep)
{
m_pWorld->Step(timeStep, velocityIters, positionIters);
timePassed -= timeStep;
}
m_pWorld->ClearForces();
}
Ovo resenje je ok sto se tice odrzavanja konstantnog framerate ali je kretanje objekata vrlo sporo i onda moram da povecam drasticno gravitaciju, brzine i impulse. Cini mi se da je lose ako se zadaju prevelike vrednosti posto sam primetio da objekti pocnu da vibriraju i na kraju odu iza event horizon-a :)
Da li neko mozda ima iskustva sa ovim i mozda solution?