Blitz3D+ Command Reference

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