2
0
Mark Sibly 7 жил өмнө
parent
commit
cd5c53c7e8

+ 14 - 1
modules/mojo3d/scene/scene.monkey2

@@ -141,7 +141,7 @@ Class Scene
 		_shadowAlpha=alpha
 	End
 	
-	#rem monkeydoc Scene update rate.
+	#rem monkeydoc Update rate.
 	#end
 	[jsonify=1]
 	Property UpdateRate:Float()
@@ -153,6 +153,18 @@ Class Scene
 		_updateRate=updateRate
 	End
 	
+	[jsonify=1]
+	#rem monkeydoc Number of update steps.
+	#end
+	Property MaxSubSteps:Int()
+		
+		Return _maxSubSteps
+	
+	Setter( maxSubSteps:Int )
+		
+		_maxSubSteps=maxSubSteps
+	End
+	
 	#rem monkeydoc Ambient diffuse lighting.
 	#end
 	[jsonify=1]
@@ -413,6 +425,7 @@ Class Scene
 	Field _shadowAlpha:Float=1
 
 	Field _updateRate:Float=60
+	Field _maxSubSteps:Int=1
 	
 	Field _csmSplits:=New Float[]( 8.0,16.0,64.0,256.0 )
 	

+ 7 - 1
modules/mojo3d/scene/world.monkey2

@@ -28,6 +28,12 @@ Class World
 		Local solver:=New btSequentialImpulseConstraintSolver()
 		
 		_btworld=New btDiscreteDynamicsWorld( dispatcher,broadphase,solver,config )
+
+'	//from BenchmarkDemo.cpp!		
+'	///the following 3 lines increase the performance dramatically, with a little bit of loss of quality
+'	m_dynamicsWorld->getSolverInfo().m_solverMode |=SOLVER_ENABLE_FRICTION_DIRECTION_CACHING; //don't recalculate friction values each frame
+'	m_dynamicsWorld->getSolverInfo().m_numIterations = 5; //few solver iterations 
+'	//m_defaultContactProcessingThreshold = 0.f;//used when creating bodies: body->setContactProcessingThreshold(...);
 		
 		initCollisions( _btworld )
 
@@ -82,7 +88,7 @@ Class World
 		
 		resetCollisions()
 		
-		_btworld.stepSimulation( 1.0/_scene.UpdateRate )
+		_btworld.stepSimulation( elapsed )',_scene.MaxSubSteps,1.0/_scene.UpdateRate )
 		
 		Local n:=getNumCollisions()