No problem Slenkar, here is a demo showing 30 stacked cubes. It's quite tricky to keep them stable, but I would imagine this would reflect reality.
To improve stability, try reducing the dWorldQuickStep(World,0.05) value. Let me know if you need further assistance ;)
To improve stability, try reducing the dWorldQuickStep(World,0.05) value. Let me know if you need further assistance ;)
; ################################################################################################### ; # JV-ODE - Cubes Demo # ; # Code by Jim Williams (VIP3R) # ; ################################################################################################### AppTitle "JV-ODE - Cubes Demo" Include "JV-ODE.bb" Graphics3D 800,600,0,2 Global StackY#=2.505 Global BaseCube Type ODEGeom Field body Field geom Field mesh End Type ; ################################################################################################### ; ### Setup ODE Global World=dWorldCreate() Global Space=dHashSpaceCreate(0) Global ContactGroup=dJointGroupCreate(0) dWorldSetAutoDisableFlag(World,1) dWorldSetGravity(World,0,-0.98,0) dWorldSetERP(World,0.4) dContactSetMode(dContactBounce) dContactSetBounce(0.0) dContactSetMu(80) ; ### Create light Global Light=CreateLight() RotateEntity Light,45,-90,0 LightColor Light,255,255,255 AmbientLight 130,130,130 ; ### Create camera Global Camera=CreateCamera() CameraClsColor Camera,0,0,0 CameraRange Camera,1,1000 PositionEntity Camera,0,140,-120 RotateEntity Camera,30,0,0 ; ### Create plane dCreatePlane(Space,0,1,0,0) Plane=CreatePlane() EntityAlpha Plane,0.8 PlaneTexture=CreateTexture(128,128,9) ClsColor 0,200,80 Cls Color 255,255,255 Rect 0,0,64,64,1 Rect 64,64,64,64,1 CopyRect 0,0,128,128,0,0,BackBuffer(),TextureBuffer(PlaneTexture) ScaleTexture PlaneTexture,20,20 EntityTexture Plane,PlaneTexture,0,0 Mirror=CreateMirror() For count=1 To 30 AddObject() Next ; ################################################################################################### While Not KeyHit(1) PTime=MilliSecs() If KeyHit(57) Then dBodyAddForce(BaseCube,0,0,8000) UpdateGeoms() dSpaceCollide(Space,World,ContactGroup) dWorldQuickStep(World,0.05) dJointGroupEmpty(ContactGroup) PhysicsTime#=MilliSecs()-PTime UpdateWorld RenderWorld Text 0,0,"JV-ODE Version "+dGetVersion() Text 0,15,"Physics Time:"+PhysicsTime Text 240,0,"Press Space to push the base cube" Flip Wend dJointGroupDestroy(ContactGroup) dSpaceDestroy(Space) dWorldDestroy(World) dCloseODE() End ; ################################################################################################### Function AddObject() ode.ODEGeom=New ODEGeom ode\body=dBodyCreate(World) If StackY<5 Then BaseCube=ode\body dBodySetRotation(ode\body,0,0,0) dBodySetPosition(ode\body,0,StackY,0) dBodySetAutoDisableFlag(ode\body,1) mass=dMassCreate() dMassSetBox(mass,1,5,5,5) dMassSetBoxTotal(mass,20,5,5,5) dBodySetMass(ode\body,mass) dMassDestroy(mass) ode\geom=dCreateBox(Space,5,5,5) dGeomContactSetMode(ode\geom,dContactBounce) dGeomContactSetBounce(ode\geom,0.0) dGeomContactSetSoftERP(ode\geom,0.1) dGeomSetBody(ode\geom,ode\body) ode\mesh=CreateCube() ScaleMesh ode\mesh,2.5,2.5,2.5 EntityColor ode\mesh,Rand(255),Rand(255),Rand(255) EntityAlpha ode\mesh,1 EntityShininess ode\mesh,0.7 StackY=StackY+5 End Function ; ################################################################################################### Function UpdateGeoms() For ode.ODEGeom=Each ODEGeom If dBodyIsEnabled(ode\body) RotateEntity ode\mesh,dGeomGetPitch#(ode\geom),dGeomGetYaw#(ode\geom),dGeomGetRoll#(ode\geom) PositionEntity ode\mesh,dGeomGetPositionX#(ode\geom),dGeomGetPositionY#(ode\geom),dGeomGetPositionZ#(ode\geom) End If Next End Function ; ###################################################################################################