2012-10-08 8 views

Odpowiedz

4
btDynamicsWorld::stepSimulation(
    btScalar timeStep, 
    int maxSubSteps=1, 
    btScalar fixedTimeStep=btScalar(1.)/btScalar(60.)); 

timeStep - czas upłynął od ostatniej symulacji.

Symulacja wewnętrzna jest wykonywana dla niektórych wewnętrznych stałych kroków. fixedTimeStep

fixedTimeStep ~~~ 0,01666666 = 1/60

jeśli timeStep 0,1 wtedy zawierać 6 (timeStep/fixedTimeStep) symulacje wewnętrznych.

Aby ruchy szybowiec BulletPhysics interpolacji wyników końcowych etap zgodny przypomnienia po podziale (timeStep/fixedTimeStep)

6

Wiem, że późno, ale myślałem, że przyjęte rozwiązanie było tylko nieznacznie lepiej niż opis w dokumentacji.

timeStep: Ilość sekund, a nie milisekund, które upłynęły od ostatniego połączenia do stepSimulation.

maxSubSteps: Generalnie powinien pozostać przy jednym, aby Bullet interpolował bieżące wartości samodzielnie. Wartość zero oznacza zmienną szybkość zaznaczania, co oznacza, że ​​Bullet przesuwa symulację dokładnie o 0,sekund zamiast interpolacji. Ta funkcja jest błędna i niezalecana. Wartość większa niż jedna musi zawsze spełniać wymagania równania lub tracisz czas w symulacji.

fixedTimeStep: Odwrotnie proporcjonalna do rozdzielczości symulacji. Rozdzielczość wzrasta wraz ze spadkiem tej wartości. Pamiętaj, że wyższa rozdzielczość oznacza, że ​​potrzeba więcej procesora.