|
entity - entity with a bone-skinned mesh red (optional) - red part of the colour, 0-255; 80 (default) green (optional) - green part of the colour, 0-255; 255 (default) blue (optional) - blue part of the colour, 0-255; 140 (default) depth_test (optional) - True hides the skeleton behind closer geometry, False draws it through everything; True (default) |
|
Queues an animated model's live bone skeleton as stick-figure lines for the next RenderWorld. DebugSkeleton draws a line from each bone that skins the entity's mesh to its nearest bone ancestor, and a small cross at each root bone. Because the lines use the bones' current world positions, you see the pose exactly as the animation system computes it each frame - great for checking that an Animate call is really playing, spotting a bone left behind by a bad export, or lining up a weapon attached with FindChild. The entity must carry a bone-skinned mesh, such as a model loaded with LoadAnimMesh from a format with skinned bones. If it does not - a plain mesh, or an MD2 model, which animates by morphing vertices rather than moving bones - the command quietly draws nothing rather than raising an error. So if no skeleton appears, that is the first thing to check. Pass False for depth_test to see the skeleton through the model's own skin, which is usually what you want. Like every Debug command, the skeleton lives for exactly one RenderWorld: the queue is drawn by the next RenderWorld and then cleared, so call DebugSkeleton every frame for as long as you want it visible. See also: LoadAnimMesh, Animate, DebugEntityAxes, ClearDebugDraw. |
; DebugSkeleton Example
; ---------------------
Graphics3D 640,480,0,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,2,-7
light=CreateLight()
RotateEntity light,45,45,0
; Load the rigged fox that ships with the glTF samples
fox=LoadAnimMesh("../../../samples/glTF/assets/Fox/Fox.glb")
If fox=0 Then RuntimeError "Could not load Fox.glb: "+ModelLoadError()
; The source model is about 150 units long, so scale it down
ScaleEntity fox,0.03,0.03,0.03
Animate fox,1,0.5,FindAnimSeq(fox,"Walk")
show=True
While Not KeyDown(1)
; Space toggles the skeleton overlay
If KeyHit(57) Then show=Not show
; Turn the fox slowly and advance its walk animation
TurnEntity fox,0,0.5,0
UpdateWorld
; DebugSkeleton queues bone-to-parent links; depth_test False shows them through the mesh
If show Then DebugSkeleton fox,80,255,140,False
; 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 Space: toggle skeleton Esc: exit"
If show Then Text 0,20,"DebugSkeleton draws the "+CountBones(fox)+" animated bones inside the mesh" Else Text 0,20,"Skeleton off - press Space"
Flip
Wend
End