|
query - query handle min_x# - minimum world X min_y# - minimum world Y min_z# - minimum world Z max_x# - maximum world X max_y# - maximum world Y max_z# - maximum world Z |
|
Returns broadphase candidates potentially overlapping the world-space minimum/maximum bounds. Bounds must be finite and ordered on every axis; zero extent is permitted. This tests conservative native tree bounds and can return false positives. Use exact sphere/capsule/box/convex overlaps for geometric intersection. Returns one hit per candidate owning shape, sorted by wrapper shape handle. Only identities and copied tags are available; AABB results do not supply points, normals, fractions, triangle/child indices or per-hit materials. The query's category/mask, ignored-body, sensor and target rules still apply. Disabled bodies are absent. Results survive StepPhysics and other queries until a successful rerun or free. Failed runs preserve previous results. World destruction frees its queries. See also: CreatePhysicsQuery, PhysicsQueryFilter, PhysicsQueryTarget, QueryPhysicsRay, QueryPhysicsSphere, PhysicsQueryLimit. |
; QueryPhysicsAABB Example
; ------------------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
Const PHYSICS_STATIC=0
Const PHYSICS_DYNAMIC=2
camera=CreateCamera()
PositionEntity camera,0,7,-8
RotateEntity camera,40,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)
; Crates scattered over the floor
Dim crates(9)
Dim crate_bodies(9)
For i=0 To 9
crates(i)=CreateCube()
ScaleEntity crates(i),0.4,0.4,0.4
PositionEntity crates(i),Rnd(-4,4),0.4,Rnd(-4,4)
crate_bodies(i)=CreatePhysicsBody(world,crates(i),PHYSICS_DYNAMIC)
crate_shape=PhysicsBodyBox(crate_bodies(i),0.8,0.8,0.8)
Next
; A query object runs searches and keeps a copy of their results
; It ignores the floor body, so only crates are found
query=CreatePhysicsQuery(world)
PhysicsQueryFilter query,-1,-1,ground_body
; A see-through yellow probe shows the search volume
probe=CreateCube()
ScaleEntity probe,1,0.5,0.5
PositionEntity probe,0,0.5,0
EntityColor probe,255,230,60
EntityAlpha probe,0.4
While Not KeyDown(1)
; A, D, W and S move the probe over the floor
If KeyDown(30) Then MoveEntity probe,-0.05,0,0
If KeyDown(32) Then MoveEntity probe,0.05,0,0
If KeyDown(17) Then MoveEntity probe,0,0,0.05
If KeyDown(31) Then MoveEntity probe,0,0,-0.05
px#=EntityX(probe)
pz#=EntityZ(probe)
StepPhysics world,1.0/60.0,4
; A quick bounds test: it can also report crates just outside the box
hits=QueryPhysicsAABB(query,px-1,0,pz-0.5,px+1,1,pz+0.5)
; Crates found by the search turn yellow
For i=0 To 9
EntityColor crates(i),255,120,70
Next
For h=1 To hits
found=PhysicsQueryEntity(query,h)
If found<>ground Then EntityColor found,255,230,60
Next
; 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
Text 0,0,"Arrow keys: move camera A / D / W / S: move the probe Esc: exit"
Text 0,20,"QueryPhysicsAABB(query,...) = "+hits
Text 0,40,"Box bounds are padded, so this is a fast first check, not an exact one"
Flip
Wend
FreePhysicsWorld world
End