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