Blitz3D+ Command Reference

PickedTriangle ( )

Parameters

None.

Description

Returns the index of the triangle hit by the most recent pick.

The index refers to a triangle within the surface returned by PickedSurface, on the mesh struck by the last CameraPick, EntityPick or LinePick. Feed it to TriangleVertex to get the triangle's three vertices, then read their positions or colours with the vertex commands - the basis of tricks like painting on meshes or per-triangle damage.

Triangle information only exists when the pick tested actual polygons - the picked entity's EntityPickMode must be 2 (polygon). Sphere and box picks leave nothing meaningful here.

See also: PickedSurface, TriangleVertex, VertexX, PickedEntity, EntityPickMode.

Example

; PickedTriangle Example
; ----------------------

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,3,-8

light=CreateLight()
RotateEntity light,45,45,0

; Shooting-gallery floor - EntityPickMode 2 makes it pickable by its polygons
floor=CreatePlane()
EntityColor floor,70,110,70
EntityPickMode floor,2

; Three targets, all pickable by their polygons
cube=CreateCube()
PositionEntity cube,-3,1,4
EntityPickMode cube,2

ball=CreateSphere()
PositionEntity ball,0,1.4,4
EntityPickMode ball,2

drum=CreateCylinder()
PositionEntity drum,3,1,4
EntityPickMode drum,2

; Small marker sphere shows the exact pick point
marker=CreateSphere()
ScaleEntity marker,0.15,0.15,0.15
EntityColor marker,255,255,0
HideEntity marker

bob#=0

While Not KeyDown(1)

    ; Repaint the targets; the picked one is flashed white below
    EntityColor cube,200,180,60
    EntityColor ball,60,120,220
    EntityColor drum,220,80,60

    ; The ball bobs gently so the gallery feels alive
    bob=bob+2
    PositionEntity ball,0,1.4+0.4*Sin(bob),4

    ; Click to shoot - CameraPick casts a pick ray through the mouse cursor
    If MouseHit(1) Then CameraPick(camera,MouseX(),MouseY())

    ; Highlight the last picked entity and park the marker on the pick point
    hit=PickedEntity()
    If hit<>0
        If hit<>floor Then EntityColor hit,255,255,255
        ShowEntity marker
        PositionEntity marker,PickedX(),PickedY(),PickedZ()
    Else
        HideEntity marker
    EndIf

    ; 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

    ; Crosshair at the mouse position
    Rect MouseX()-6,MouseY(),13,1
    Rect MouseX(),MouseY()-6,1,13

    Text 0,0,"Click a target to pick it   Arrow keys: move camera   Esc: exit"
    ; PickedTriangle is the index of the exact triangle the pick ray struck
    Text 0,20,"PickedTriangle: "+PickedTriangle()
    Text 0,40,"A cube is only 12 triangles - each face gives a different pair"
    Text 0,60,"The smooth ball is made of many more - click around it and see"

    Flip

Wend

End

Index