Blitz3D+ Command Reference

PickedNX# ( )

Parameters

None.

Description

Returns the x component of the surface normal at the point hit by the most recent pick.

After a CameraPick, EntityPick or LinePick, the normal is a unit-length vector pointing directly away from the surface that was struck. Combined, the three components describe which way the struck face points - ideal for orienting a decal or bouncing a projectile off a wall.

Only read the normal after a successful pick - after a miss the Picked commands keep the values of the last successful pick.

See also: PickedNY, PickedNZ, PickedX, AlignToVector, CameraPick.

Example

; PickedNX 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 or the floor to pick it   Arrow keys: move camera   Esc: exit"
    ; PickedNX is the x component of the surface normal at the pick point
    Text 0,20,"PickedNX: "+PickedNX()
    Text 0,40,"(PickedNY: "+PickedNY()+"   PickedNZ: "+PickedNZ()+")"
    Text 0,60,"Pick left and right of the ball's centre and watch PickedNX swing -1 to 1"

    Flip

Wend

End

Index