PhysicsQueryContactRollingY# ( query,manifold )
Parameters
|
query - owned query handle manifold - one-based manifold index |
Description
|
Returns the native copied rolling resistance angular impulse Y component. Units are newton-metre-seconds, in world axes. This is a solved impulse diagnostic, not a force/torque or whole-step average. Sleeping contacts retain cached values. Query results are copied and survive stepping, other queries and deletion until this query runs successfully again or is freed. Generation-checked identity getters return zero for deleted objects; copied tags and numerical fields survive. Failed runs retain the complete previous payload. Freeing the owning world frees its queries. Invalid/stale/wrong-kind handles, invalid indices or unavailable payload fields raise runtime errors. Requires Extended mode. See also: QueryPhysicsBodyContacts, QueryPhysicsShapeContacts, QueryPhysicsSensor, CountPhysicsQueryManifolds, PhysicsBodyEvents. |
Example
; PhysicsQueryContactRollingY Example ; ----------------------------------- ; Requires Extended mode. Graphics3D 640,480,0,2 SetBuffer BackBuffer() Const PHYSICS_STATIC=0 Const PHYSICS_DYNAMIC=2 camera=CreateCamera() PositionEntity camera,0,3,-7 RotateEntity camera,20,0,0 light=CreateLight() RotateEntity light,45,-30,0 AmbientLight 60,60,60 ; An independent Box3D world with standard gravity world=CreatePhysicsWorld() ; Blue static floor ground=CreateCube() ScaleEntity ground,6,0.5,6 PositionEntity ground,0,-0.5,0 EntityColor ground,80,160,255 ground_body=CreatePhysicsBody(world,ground,PHYSICS_STATIC) ground_shape=PhysicsBodyBox(ground_body,12,1,12) ; An orange crate on the floor, with a green crate resting on top crate=CreateCube() ScaleEntity crate,0.6,0.6,0.6 EntityColor crate,255,120,70 crate_body=CreatePhysicsBody(world,crate,PHYSICS_DYNAMIC) crate_shape=PhysicsBodyBox(crate_body,1.2,1.2,1.2) top=CreateCube() ScaleEntity top,0.4,0.4,0.4 EntityColor top,120,200,140 top_body=CreatePhysicsBody(world,top,PHYSICS_DYNAMIC) top_shape=PhysicsBodyBox(top_body,0.8,0.8,0.8) ResetPhysicsBody crate_body,0,0.6,0,0,0,0 ResetPhysicsBody top_body,0,1.6,0,0,0,0 ; A query object keeps a copy of the contacts it finds query=CreatePhysicsQuery(world) ; A ball with rolling resistance, so rolling on the floor slows it down ball=CreateSphere(16) ScaleEntity ball,0.4,0.4,0.4 EntityColor ball,255,230,60 ball_body=CreatePhysicsBody(world,ball,PHYSICS_DYNAMIC) ball_shape=PhysicsBodySphere(ball_body,0.8) PhysicsShapeRollingResistance ball_shape,0.3 ResetPhysicsBody ball_body,-3,0.4,-1.5,0,0,0 While Not KeyDown(1) ; Space shoves the orange crate along the floor, R stacks the crates again If KeyHit(57) Then PhysicsBodyImpulse crate_body,4,0,0 If KeyHit(19) ResetPhysicsBody crate_body,0,0.6,0,0,0,0 ResetPhysicsBody top_body,0,1.6,0,0,0,0 EndIf ; B sets the ball rolling If KeyHit(48) Then PhysicsBodyVelocity ball_body,5,0,0 StepPhysics world,1.0/60.0,4 ; Copy the ball's contact with the floor manifolds=QueryPhysicsBodyContacts(query,ball_body) ; Arrow keys move the camera If KeyDown(200) Then MoveEntity camera,0,0,0.1 If KeyDown(208) Then MoveEntity camera,0,0,-0.1 If KeyDown(203) Then TurnEntity camera,0,1,0 If KeyDown(205) Then TurnEntity camera,0,-1,0 RenderWorld ; Ring every contact point For m=1 To manifolds For p=1 To PhysicsQueryContactPoints(query,m) CameraProject camera,PhysicsQueryContactX(query,m,p),PhysicsQueryContactY(query,m,p),PhysicsQueryContactZ(query,m,p) Oval ProjectedX()-3,ProjectedY()-3,7,7,False Next Next Text 0,0,"Arrow keys: move camera Space: shove R: reset B: roll the ball" Text 0,20,"Esc: exit" If manifolds>0 Text 0,40+0,"PhysicsQueryContactRollingY(query,1) = "+PhysicsQueryContactRollingY(query,1)+" N m s" Text 0,40+20,"(rolling impulse "+PhysicsQueryContactRollingX(query,1)+", "+PhysicsQueryContactRollingY(query,1)+", "+PhysicsQueryContactRollingZ(query,1)+" N m s)" Text 0,40+40,"Rolling resistance slows the yellow ball as it rolls" EndIf Flip Wend FreePhysicsWorld world End
Index