Posted: 19th Feb 2004 9:37
Shows how to use the intersect object command and get the coordinates of intersection using the returned distance from that function.

+ Code Snippet
set display mode 800,600,32
REM make a random image
for x=1 to 32
   for y=1 to 32
      dot x, y, rgb(0,rnd(255),0)
   next y
next x
get image 1,1,1,32,32



sync on
backdrop on
autocam off
hide mouse
randomize timer()

REM VARIABLES
y#=100.0
line#=1000.0

REM OBJECTS
for i=1 to 5
   make object cube i, 100
   position object i, rnd(1000),100,rnd(1000)
next i

for i=6 to 10
   make object sphere i, rnd(100)+50
   position object i, rnd(1000),100,rnd(1000)
next i

rem make some ground
make object plain 11, 1000,1000
xrotate object 11, 90
position object 11, 500,0,500
texture object 11, 1
scale object texture 11,10,10
set object light 11, 0


REM END OF LINE OBJECT
make object sphere 100,10
color object 100,rgb(255,0,0)


REM ================== MAIN LOOP ===============
DO


   gosub PLAYER_CONTROLS
   gosub CAMERA_STATUS



   d# = cos(cxa#) * line#
   ty# = y# - sin(cxa#) * line#
   tx# = newxvalue(x#,a#,d#)
   tz# = newzvalue(z#,a#,d#)


   olddist# = line#
   for obj=1 to 11
      dist# = intersect object(obj, x#,y#,z#,tx#,ty#,tz#)
      if dist# < olddist# and dist# > 0
         olddist# = dist#
      endif
   next obj

   dist# = olddist#

   if dist# = 0 then dist# = line#

   gdist# = cos(cxa#)*dist#
   tx# = newxvalue(x#, a#, gdist#)
   ty# = y# - sin(cxa#)*dist#
   tz# = newzvalue(z#, a#, gdist#)


   position object 100,tx#,ty#,tz#



   text 1,1,"FPS: "+str$(screen fps())
   text 1, 10,"Distance: "+str$(dist#)
   set cursor 0,20
   print object position x(100)
   print object position y(100)
   print object position z(100)

sync
loop


REM control player's movement
PLAYER_CONTROLS:
  runspeed#=0
  if shiftkey()=1 then runspeed#=-5.5
  if upkey()=1
    x#=newxvalue(x#,a#,6+runspeed#)
    z#=newzvalue(z#,a#,6+runspeed#)
  endif
  if downkey()=1
    x#=newxvalue(x#,a#,-6-runspeed#)
    z#=newzvalue(z#,a#,-6-runspeed#)
  endif
  if leftkey()=1
    x#=newxvalue(x#,wrapvalue(a#-90.0),6.0+runspeed#)
    z#=newzvalue(z#,wrapvalue(a#-90.0),6.0+runspeed#)
  endif
  if rightkey()=1
    x#=newxvalue(x#,wrapvalue(a#+90.0),6.0+runspeed#)
    z#=newzvalue(z#,wrapvalue(a#+90.0),6.0+runspeed#)
  endif

RETURN


REM control player's angle of site/rotation and position
CAMERA_STATUS:
  rem rotate camera according to mouse
  a#=wrapvalue(a#+(mousemovex()/3.0))
  rem position and rotate camera
  cxa#=cxa#+(mousemovey()/3.0)
  if cxa#<-90.0 then cxa#=-90.0
  if cxa#>90.0 then cxa#=90.0
  position camera x#,y#,z#
  rotate camera wrapvalue(cxa#),a#,0
RETURN
Posted: 22nd Feb 2004 10:12
Good work, now try and find the normals of the object it hit, harder but not impossible.
Posted: 22nd Feb 2004 13:30
hmmm, i think i might be able to do that. keyword is might