Posted: 29th Jun 2003 16:27
Up key - move the red sphere towards the mouse coordinates on a matrix
Left mouse button - rotate camera
Right mouse button - move camera

+ Code Snippet
`*******************************************************************************
`*                     By: DMiTR0S   dmitr0s@newmail.ru                        *
`*******************************************************************************

`*******************************************************************************
`*                            Free License Agreement.                          *
`*                                                                             *
`*   The user/developer agrees to include a visible credit to "Dmitri Kuschev" *
`*   within your programs documentation and or web site.                       *
`*                                                                             *
`*   The user/developer agrees to NOT offer the this source code for Sale.     *
`*                                                                             *
`*   Providing the user/Developer agrees in full to the previous Free          *
`*   License Agreement clauses, the user/developer may use this source         *
`*   code FREELY in all their products, commercial or otherwise.               *
`*                                                                             *
`*******************************************************************************
Set Display Mode 1024, 768, 32

Autocam off
Randomize Timer()

Global Distance# As Float
Global IntersectionPointX# As Float
Global IntersectionPointY# As Float
Global IntersectionPointZ# As Float

MoveVector=1
MatrixClone=1
Matrix=1
Step#=5.0
width=500*2.0
depth=500*2.0
xTiles=30
zTiles=30
r=Make Vector3(MoveVector)

Make Matrix Matrix ,width, depth, xTiles, zTiles
Randomize Matrix Matrix, 50
Update Matrix Matrix
Position Matrix Matrix, RND(10), RND(10), RND(10)

Position Camera width/2, 200.0, -500.0

MakeObjectFromMatrix(Matrix, MatrixClone, xTiles, zTiles, width/(xTiles*1.0), depth/(zTiles*1.0), xTiles+1)

Make Object Sphere 10, 5.0
Color Object 10, RGB(0,255,0)

Make Object Sphere 11, 10.0
Color Object 11, RGB(255,0,0)
Position Object 11, Matrix Position X(Matrix)+RND(width), 0.0, Matrix Position Z(Matrix)+RND(height)

Sync Rate 0
Sync On
Do
   Gosub Camera
   Gosub NewDestinationPoint
   Gosub MoveSphere
   Gosub PrintInfo

   Sync
Loop

NewDestinationPoint:
   GetMatrixCloneIntersection(MatrixClone)
   If GetDistanceToObject()>0.0
      Show Object 10
      Position Object 10, GetIntersectionPointX(), GetIntersectionPointY(), GetIntersectionPointZ()
   EndIf
 Return

 MoveSphere:
   If UpKey()
      Set Vector3 MoveVector, GetIntersectionPointX()-Object Position X(11), GetIntersectionPointY()-Object Position Y(11), GetIntersectionPointZ()-Object Position Z(11)
      If Length Vector3(MoveVector) > Step#
         Normalize Vector3 MoveVector, MoveVector
         Multiply Vector3 MoveVector, Step#
         NewX#=Object Position X(11)+X Vector3(MoveVector)
         NewZ#=Object Position Z(11)+Z Vector3(MoveVector)
         NewY#=Matrix Position Y(Matrix)+Get Ground Height(Matrix, NewX#-Matrix Position X(Matrix), NewZ#-Matrix Position Z(Matrix))
         Position Object 11, NewX#, NewY#, NewZ#
      Else
         Position Object 11, GetIntersectionPointX(), GetIntersectionPointY(), GetIntersectionPointZ()
      EndIf
   EndIf
Return

Camera:
   If MouseClick()=1
      cay#=cay#+(Mousemovex()/10.0)
      cax#=cax#+(Mousemovey()/10.0)
      If cax#>90.0 Then cax#=90.0
      ax#=Curveangle(cax#,ax#,2.0)
      ay#=Curveangle(cay#,ay#,2.0)
      Rotate Camera Wrapvalue(ax#*-1),Wrapvalue(ay#),Wrapvalue(caz)
   EndIf

   If Mouseclick()=2
      cy#=cy#+MousemoveY()
      Move Camera MousemoveX()
      Position Camera Camera Position X(), cy#, Camera Position Z()
   EndIf
return

PrintInfo:
   Text 10, 10, "Code by: Dmitri Kuschev"
   Text 10, 30, "E-mail: dmitr0s@newmail.ru"
   Text 10, 50, "FPS "+Str$(Screen FPS())
   Text 10, 70, "Press Up to move the red sphere towards the destination point"
   Text 10, 90, "Step: "+Str$(Step#)
   Text 10, 110, "Distance from the camera to the destination point: "+Str$(GetDistanceToObject())
   Text 10, 130, "Position of the red sphere on the matrix in world coordinates:"
   Text 10, 150, "X = "+Str$(Object Position X(11))
   Text 10, 170, "Y = "+Str$(Object Position Y(11))
   Text 10, 190, "Z = "+Str$(Object Position Z(11))
   Text 10, 210, "Position of the red sphere on the matrix in matrix coordinates:"
   Text 10, 230, "X = "+Str$(Object Position X(11)-Matrix Position X(1))
   Text 10, 250, "Y = "+Str$(Object Position Y(11)-Matrix Position Y(1))
   Text 10, 270, "Get Ground Height( Matrix, X, Z ) = "+Str$(Get Ground Height(Matrix, Object Position X(11)-Matrix Position X(1), Object Position Z(11)-Matrix Position Z(1)))
   Text 10, 290, "Z = "+Str$(Object Position Z(11)-Matrix Position Z(1))
   Text 10, 310, "Destination point in world coordinates:"
   Text 10, 330, "GetIntersectionPointX() X = "+Str$(GetIntersectionPointX())
   Text 10, 350, "GetIntersectionPointY() Y = "+Str$(GetIntersectionPointY())
   Text 10, 370, "GetIntersectionPointZ() Z = "+Str$(GetIntersectionPointZ())
   Text 10, 390, "Destination point in matrix coordinates:"
   Text 10, 410, "X = "+Str$(GetIntersectionPointX()-Matrix Position X(1))
   Text 10, 430, "Y = "+Str$(GetIntersectionPointY()-Matrix Position Y(1))
   Text 10, 450, "Z = "+Str$(GetIntersectionPointZ()-Matrix Position Z(1))
Return


Function MakeObjectFromMatrix(Matrix, Object, ,MXSegments, MZSegments, MXSegmentSize#, MZSegmentSize#, VIR)
   VerticlesCount=(MXSegments)*(MZSegments)*6
   FVFFormat=338
   FVFSize=36
   If Memblock Exist(1) Then Delete Memblock 1
   Make Memblock 1, 12+VerticlesCount*FVFSize
   Write Memblock Dword 1, 0, FVFFormat
   Write Memblock Dword 1, 4, FVFSize
   Write Memblock Dword 1, 8, VerticlesCount
   For SX=1 to MXSegments
      For SZ=1 To MZSegments
         Num=MXSegments*(SZ-1)+SX
         Poly1X1#=Matrix Position X(Matrix)+(SX-1)*MXSegmentSize#
         Poly1Y1#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX-1, SZ-1)
         Poly1Z1#=Matrix Position Z(Matrix)+(SZ-1)*MZSegmentSize#

         Poly1X2#=Matrix Position X(Matrix)+(SX-1)*MXSegmentSize#
         Poly1Y2#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX-1, SZ)
         Poly1Z2#=Matrix Position Z(Matrix)+SZ*MZSegmentSize#

         Poly1X3#=Matrix Position X(Matrix)+SX*MXSegmentSize#
         Poly1Y3#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX, SZ)
         Poly1Z3#=Matrix Position Z(Matrix)+SZ*MZSegmentSize#

         Poly2X1#=Matrix Position X(Matrix)+(SX-1)*MXSegmentSize#
         Poly2Y1#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX-1, SZ-1)
         Poly2Z1#=Matrix Position Z(Matrix)+(SZ-1)*MZSegmentSize#

         Poly2X2#=Matrix Position X(Matrix)+SX*MXSegmentSize#
         Poly2Y2#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX, SZ)
         Poly2Z2#=Matrix Position Z(Matrix)+SZ*MZSegmentSize#

         Poly2X3#=Matrix Position X(Matrix)+SX*MXSegmentSize#
         Poly2Y3#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX, SZ-1)
         Poly2Z3#=Matrix Position Z(Matrix)+(SZ-1)*MZSegmentSize#

         Write Memblock Float 1, 12+216*(Num-1), Poly1X1#
         Write Memblock Float 1, 16+216*(Num-1), Poly1Y1#
         Write Memblock Float 1, 20+216*(Num-1), Poly1Z1#
         Write Memblock Float 1, 24+216*(Num-1), 0.0
         Write Memblock Float 1, 28+216*(Num-1), 0.0
         Write Memblock Float 1, 32+216*(Num-1), -1.0
         Write Memblock Dword 1, 36+216*(Num-1), -1
         Write Memblock Float 1, 40+216*(Num-1), 0.0
         Write Memblock Float 1, 44+216*(Num-1), 1.0

         Write Memblock Float 1, 48+216*(Num-1), Poly1X2#
         Write Memblock Float 1, 52+216*(Num-1), Poly1Y2#
         Write Memblock Float 1, 56+216*(Num-1), Poly1Z2#
         Write Memblock Float 1, 60+216*(Num-1), 0.0
         Write Memblock Float 1, 64+216*(Num-1), 0.0
         Write Memblock Float 1, 68+216*(Num-1), -1.0
         Write Memblock Dword 1, 72+216*(Num-1), -1
         Write Memblock Float 1, 76+216*(Num-1), 0.0
         Write Memblock Float 1, 80+216*(Num-1), 0.0

         Write Memblock Float 1, 84+216*(Num-1), Poly1X3#
         Write Memblock Float 1, 88+216*(Num-1), Poly1Y3#
         Write Memblock Float 1, 92+216*(Num-1), Poly1Z3#
         Write Memblock Float 1, 96+216*(Num-1), 0.0
         Write Memblock Float 1, 100+216*(Num-1), 0.0
         Write Memblock Float 1, 104+216*(Num-1), -1.0
         Write Memblock Dword 1, 108+216*(Num-1), -1
         Write Memblock Float 1, 112+216*(Num-1), 1.0
         Write Memblock Float 1, 116+216*(Num-1), 1.0

         Write Memblock Float 1, 120+216*(Num-1), Poly2X1#
         Write Memblock Float 1, 124+216*(Num-1), Poly2Y1#
         Write Memblock Float 1, 128+216*(Num-1), Poly2Z1#
         Write Memblock Float 1, 132+216*(Num-1), 0.0
         Write Memblock Float 1, 136+216*(Num-1), 0.0
         Write Memblock Float 1, 140+216*(Num-1), -1.0
         Write Memblock Dword 1, 144+216*(Num-1), -1
         Write Memblock Float 1, 148+216*(Num-1), 1.0
         Write Memblock Float 1, 152+216*(Num-1), 0.0

         Write Memblock Float 1, 156+216*(Num-1), Poly2X2#
         Write Memblock Float 1, 160+216*(Num-1), Poly2Y2#
         Write Memblock Float 1, 164+216*(Num-1), Poly2Z2#
         Write Memblock Float 1, 168+216*(Num-1), 0.0
         Write Memblock Float 1, 172+216*(Num-1), 0.0
         Write Memblock Float 1, 176+216*(Num-1), -1.0
         Write Memblock Dword 1, 180+216*(Num-1), -1
         Write Memblock Float 1, 184+216*(Num-1), 1.0
         Write Memblock Float 1, 188+216*(Num-1), 1.0

         Write Memblock Float 1, 192+216*(Num-1), Poly2X3#
         Write Memblock Float 1, 196+216*(Num-1), Poly2Y3#
         Write Memblock Float 1, 200+216*(Num-1), Poly2Z3#
         Write Memblock Float 1, 204+216*(Num-1), 0.0
         Write Memblock Float 1, 208+216*(Num-1), 0.0
         Write Memblock Float 1, 212+216*(Num-1), -1.0
         Write Memblock Dword 1, 216+216*(Num-1), -1
         Write Memblock Float 1, 220+216*(Num-1), 0.0
         Write Memblock Float 1, 224+216*(Num-1), 1.0

      Next SZ

   Next SX

  Make Mesh From Memblock 1, 1
  If Object Exist(Object) Then Delete Object Object
  Make Object Object, 1, 22
  Hide Object Object
EndFunction

Function GetMatrixCloneIntersection(Obj)
   DestPoint=2
   ViewMatrix=101
   ProjectionMatrix=102
   r=Make Matrix4(ViewMatrix)
   r=Make Matrix4(ProjectionMatrix)
   r=Make Vector3(DestPoint)
   X#=2.0*(Mousex()*1.0)/(Screen Width()*1.0)-1.0
   Y#=1.0-2.0*(MouseY()*1.0)/(Screen Height()*1.0)
   Set Vector3 DestPoint, X#, Y#, 1.0
   View Matrix4 ViewMatrix
   Projection Matrix4 ProjectionMatrix
   r=Inverse Matrix4(ViewMatrix, ViewMatrix)
   r=Inverse Matrix4(ProjectionMatrix, ProjectionMatrix)
   Transform Coords Vector3 DestPoint, DestPoint, ProjectionMatrix
   Normalize Vector3 DestPoint, DestPoint
   Multiply Vector3 DestPoint, 1000.0
   Transform Coords Vector3 DestPoint, DestPoint, ViewMatrix

   Distance#=Intersect Object(Obj, Camera Position X(), Camera Position Y(), Camera Position Z(), X Vector3(DestPoint), Y Vector3(DestPoint), Z Vector3(DestPoint))

   Set Vector3 DestPoint, (X Vector3(DestPoint)-Camera Position X()), (Y Vector3(DestPoint)-Camera Position Y()), (Z Vector3(DestPoint)-Camera Position Z())
   Normalize Vector3 DestPoint, DestPoint
   Multiply Vector3 DestPoint, Distance#
   Set Vector3 DestPoint, X Vector3(DestPoint)+Camera Position X(), Y Vector3(DestPoint)+Camera Position Y(), Z Vector3(DestPoint)+Camera Position Z()

   If Distance#>0.0
      IntersectionPointX#=X Vector3(DestPoint)
      IntersectionPointY#=Y Vector3(DestPoint)
      IntersectionPointZ#=Z Vector3(DestPoint)
   Else
      IntersectionPointX#=0.0
      IntersectionPointY#=0.0
      IntersectionPointZ#=0.0
   EndIf
EndFunction

Function GetIntersectionPointX()
EndFunction IntersectionPointX#

Function GetIntersectionPointY()
EndFunction IntersectionPointY#

Function GetIntersectionPointZ()
EndFunction IntersectionPointZ#

Function GetDistanceToObject()
EndFunction Distance#

Delete Memblock 1


Posted: 30th Jun 2003 8:23
hey dmitros there was an error in that code snippet. at line 93 you had

If cax#90.0 Then cax#=90.0

it should have been

If cax#=90.0 Then cax#=90.0

so this is dmitros's whole code snippet for anyone who wants it

+ Code Snippet
`*******************************************************************************
`*                     By: DMiTR0S   dmitr0s@newmail.ru                        *
`*******************************************************************************

`*******************************************************************************
`*                            Free License Agreement.                          *
`*                                                                             *
`*   The user/developer agrees to include a visible credit to "Dmitri Kuschev" *
`*   within your programs documentation and or web site.                       *
`*                                                                             *
`*   The user/developer agrees to NOT offer the this source code for Sale.     *
`*                                                                             *
`*   Providing the user/Developer agrees in full to the previous Free          *
`*   License Agreement clauses, the user/developer may use this source         *
`*   code FREELY in all their products, commercial or otherwise.               *
`*                                                                             *
`*******************************************************************************
Set Display Mode 1024, 768, 32

Autocam off
Randomize Timer()

Global Distance# As Float
Global IntersectionPointX# As Float
Global IntersectionPointY# As Float
Global IntersectionPointZ# As Float

MoveVector=1
MatrixClone=1
Matrix=1
Step#=5.0
width=500*2.0
depth=500*2.0
xTiles=30
zTiles=30
r=Make Vector3(MoveVector)

Make Matrix Matrix ,width, depth, xTiles, zTiles
Randomize Matrix Matrix, 50
Update Matrix Matrix
Position Matrix Matrix, RND(10), RND(10), RND(10)

Position Camera width/2, 200.0, -500.0

MakeObjectFromMatrix(Matrix, MatrixClone, xTiles, zTiles, width/(xTiles*1.0), depth/(zTiles*1.0), xTiles+1)

Make Object Sphere 10, 5.0
Color Object 10, RGB(0,255,0)

Make Object Sphere 11, 10.0
Color Object 11, RGB(255,0,0)
Position Object 11, Matrix Position X(Matrix)+RND(width), 0.0, Matrix Position Z(Matrix)+RND(height)

Sync Rate 0
Sync On
Do
   Gosub Camera
   Gosub NewDestinationPoint
   Gosub MoveSphere
   Gosub PrintInfo

   Sync
Loop

NewDestinationPoint:
   GetMatrixCloneIntersection(MatrixClone)
   If GetDistanceToObject()>0.0
      Show Object 10
      Position Object 10, GetIntersectionPointX(), GetIntersectionPointY(), GetIntersectionPointZ()
   EndIf
 Return

 MoveSphere:
   If UpKey()
      Set Vector3 MoveVector, GetIntersectionPointX()-Object Position X(11), GetIntersectionPointY()-Object Position Y(11), GetIntersectionPointZ()-Object Position Z(11)
      If Length Vector3(MoveVector) > Step#
         Normalize Vector3 MoveVector, MoveVector
         Multiply Vector3 MoveVector, Step#
         NewX#=Object Position X(11)+X Vector3(MoveVector)
         NewZ#=Object Position Z(11)+Z Vector3(MoveVector)
         NewY#=Matrix Position Y(Matrix)+Get Ground Height(Matrix, NewX#-Matrix Position X(Matrix), NewZ#-Matrix Position Z(Matrix))
         Position Object 11, NewX#, NewY#, NewZ#
      Else
         Position Object 11, GetIntersectionPointX(), GetIntersectionPointY(), GetIntersectionPointZ()
      EndIf
   EndIf
Return

Camera:
   If MouseClick()=1
      cay#=cay#+(Mousemovex()/10.0)
      cax#=cax#+(Mousemovey()/10.0)
      If cax#=90.0 Then cax#=90.0
      ax#=Curveangle(cax#,ax#,2.0)
      ay#=Curveangle(cay#,ay#,2.0)
      Rotate Camera Wrapvalue(ax#*-1),Wrapvalue(ay#),Wrapvalue(caz)
   EndIf

   If Mouseclick()=2
      cy#=cy#+MousemoveY()
      Move Camera MousemoveX()
      Position Camera Camera Position X(), cy#, Camera Position Z()
   EndIf
return

PrintInfo:
   Text 10, 10, "Code by: Dmitri Kuschev"
   Text 10, 30, "E-mail: dmitr0s@newmail.ru"
   Text 10, 50, "FPS "+Str$(Screen FPS())
   Text 10, 70, "Press Up to move the red sphere towards the destination point"
   Text 10, 90, "Step: "+Str$(Step#)
   Text 10, 110, "Distance from the camera to the destination point: "+Str$(GetDistanceToObject())
   Text 10, 130, "Position of the red sphere on the matrix in world coordinates:"
   Text 10, 150, "X = "+Str$(Object Position X(11))
   Text 10, 170, "Y = "+Str$(Object Position Y(11))
   Text 10, 190, "Z = "+Str$(Object Position Z(11))
   Text 10, 210, "Position of the red sphere on the matrix in matrix coordinates:"
   Text 10, 230, "X = "+Str$(Object Position X(11)-Matrix Position X(1))
   Text 10, 250, "Y = "+Str$(Object Position Y(11)-Matrix Position Y(1))
   Text 10, 270, "Get Ground Height( Matrix, X, Z ) = "+Str$(Get Ground Height(Matrix, Object Position X(11)-Matrix Position X(1), Object Position Z(11)-Matrix Position Z(1)))
   Text 10, 290, "Z = "+Str$(Object Position Z(11)-Matrix Position Z(1))
   Text 10, 310, "Destination point in world coordinates:"
   Text 10, 330, "GetIntersectionPointX() X = "+Str$(GetIntersectionPointX())
   Text 10, 350, "GetIntersectionPointY() Y = "+Str$(GetIntersectionPointY())
   Text 10, 370, "GetIntersectionPointZ() Z = "+Str$(GetIntersectionPointZ())
   Text 10, 390, "Destination point in matrix coordinates:"
   Text 10, 410, "X = "+Str$(GetIntersectionPointX()-Matrix Position X(1))
   Text 10, 430, "Y = "+Str$(GetIntersectionPointY()-Matrix Position Y(1))
   Text 10, 450, "Z = "+Str$(GetIntersectionPointZ()-Matrix Position Z(1))
Return


Function MakeObjectFromMatrix(Matrix, Object, ,MXSegments, MZSegments, MXSegmentSize#, MZSegmentSize#, VIR)
   VerticlesCount=(MXSegments)*(MZSegments)*6
   FVFFormat=338
   FVFSize=36
   If Memblock Exist(1) Then Delete Memblock 1
   Make Memblock 1, 12+VerticlesCount*FVFSize
   Write Memblock Dword 1, 0, FVFFormat
   Write Memblock Dword 1, 4, FVFSize
   Write Memblock Dword 1, 8, VerticlesCount
   For SX=1 to MXSegments
      For SZ=1 To MZSegments
         Num=MXSegments*(SZ-1)+SX
         Poly1X1#=Matrix Position X(Matrix)+(SX-1)*MXSegmentSize#
         Poly1Y1#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX-1, SZ-1)
         Poly1Z1#=Matrix Position Z(Matrix)+(SZ-1)*MZSegmentSize#

         Poly1X2#=Matrix Position X(Matrix)+(SX-1)*MXSegmentSize#
         Poly1Y2#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX-1, SZ)
         Poly1Z2#=Matrix Position Z(Matrix)+SZ*MZSegmentSize#

         Poly1X3#=Matrix Position X(Matrix)+SX*MXSegmentSize#
         Poly1Y3#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX, SZ)
         Poly1Z3#=Matrix Position Z(Matrix)+SZ*MZSegmentSize#

         Poly2X1#=Matrix Position X(Matrix)+(SX-1)*MXSegmentSize#
         Poly2Y1#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX-1, SZ-1)
         Poly2Z1#=Matrix Position Z(Matrix)+(SZ-1)*MZSegmentSize#

         Poly2X2#=Matrix Position X(Matrix)+SX*MXSegmentSize#
         Poly2Y2#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX, SZ)
         Poly2Z2#=Matrix Position Z(Matrix)+SZ*MZSegmentSize#

         Poly2X3#=Matrix Position X(Matrix)+SX*MXSegmentSize#
         Poly2Y3#=Matrix Position Y(Matrix)+Get Matrix Height(1, SX, SZ-1)
         Poly2Z3#=Matrix Position Z(Matrix)+(SZ-1)*MZSegmentSize#

         Write Memblock Float 1, 12+216*(Num-1), Poly1X1#
         Write Memblock Float 1, 16+216*(Num-1), Poly1Y1#
         Write Memblock Float 1, 20+216*(Num-1), Poly1Z1#
         Write Memblock Float 1, 24+216*(Num-1), 0.0
         Write Memblock Float 1, 28+216*(Num-1), 0.0
         Write Memblock Float 1, 32+216*(Num-1), -1.0
         Write Memblock Dword 1, 36+216*(Num-1), -1
         Write Memblock Float 1, 40+216*(Num-1), 0.0
         Write Memblock Float 1, 44+216*(Num-1), 1.0

         Write Memblock Float 1, 48+216*(Num-1), Poly1X2#
         Write Memblock Float 1, 52+216*(Num-1), Poly1Y2#
         Write Memblock Float 1, 56+216*(Num-1), Poly1Z2#
         Write Memblock Float 1, 60+216*(Num-1), 0.0
         Write Memblock Float 1, 64+216*(Num-1), 0.0
         Write Memblock Float 1, 68+216*(Num-1), -1.0
         Write Memblock Dword 1, 72+216*(Num-1), -1
         Write Memblock Float 1, 76+216*(Num-1), 0.0
         Write Memblock Float 1, 80+216*(Num-1), 0.0

         Write Memblock Float 1, 84+216*(Num-1), Poly1X3#
         Write Memblock Float 1, 88+216*(Num-1), Poly1Y3#
         Write Memblock Float 1, 92+216*(Num-1), Poly1Z3#
         Write Memblock Float 1, 96+216*(Num-1), 0.0
         Write Memblock Float 1, 100+216*(Num-1), 0.0
         Write Memblock Float 1, 104+216*(Num-1), -1.0
         Write Memblock Dword 1, 108+216*(Num-1), -1
         Write Memblock Float 1, 112+216*(Num-1), 1.0
         Write Memblock Float 1, 116+216*(Num-1), 1.0

         Write Memblock Float 1, 120+216*(Num-1), Poly2X1#
         Write Memblock Float 1, 124+216*(Num-1), Poly2Y1#
         Write Memblock Float 1, 128+216*(Num-1), Poly2Z1#
         Write Memblock Float 1, 132+216*(Num-1), 0.0
         Write Memblock Float 1, 136+216*(Num-1), 0.0
         Write Memblock Float 1, 140+216*(Num-1), -1.0
         Write Memblock Dword 1, 144+216*(Num-1), -1
         Write Memblock Float 1, 148+216*(Num-1), 1.0
         Write Memblock Float 1, 152+216*(Num-1), 0.0

         Write Memblock Float 1, 156+216*(Num-1), Poly2X2#
         Write Memblock Float 1, 160+216*(Num-1), Poly2Y2#
         Write Memblock Float 1, 164+216*(Num-1), Poly2Z2#
         Write Memblock Float 1, 168+216*(Num-1), 0.0
         Write Memblock Float 1, 172+216*(Num-1), 0.0
         Write Memblock Float 1, 176+216*(Num-1), -1.0
         Write Memblock Dword 1, 180+216*(Num-1), -1
         Write Memblock Float 1, 184+216*(Num-1), 1.0
         Write Memblock Float 1, 188+216*(Num-1), 1.0

         Write Memblock Float 1, 192+216*(Num-1), Poly2X3#
         Write Memblock Float 1, 196+216*(Num-1), Poly2Y3#
         Write Memblock Float 1, 200+216*(Num-1), Poly2Z3#
         Write Memblock Float 1, 204+216*(Num-1), 0.0
         Write Memblock Float 1, 208+216*(Num-1), 0.0
         Write Memblock Float 1, 212+216*(Num-1), -1.0
         Write Memblock Dword 1, 216+216*(Num-1), -1
         Write Memblock Float 1, 220+216*(Num-1), 0.0
         Write Memblock Float 1, 224+216*(Num-1), 1.0

      Next SZ

   Next SX

  Make Mesh From Memblock 1, 1
  If Object Exist(Object) Then Delete Object Object
  Make Object Object, 1, 22
  Hide Object Object
EndFunction

Function GetMatrixCloneIntersection(Obj)
   DestPoint=2
   ViewMatrix=101
   ProjectionMatrix=102
   r=Make Matrix4(ViewMatrix)
   r=Make Matrix4(ProjectionMatrix)
   r=Make Vector3(DestPoint)
   X#=2.0*(Mousex()*1.0)/(Screen Width()*1.0)-1.0
   Y#=1.0-2.0*(MouseY()*1.0)/(Screen Height()*1.0)
   Set Vector3 DestPoint, X#, Y#, 1.0
   View Matrix4 ViewMatrix
   Projection Matrix4 ProjectionMatrix
   r=Inverse Matrix4(ViewMatrix, ViewMatrix)
   r=Inverse Matrix4(ProjectionMatrix, ProjectionMatrix)
   Transform Coords Vector3 DestPoint, DestPoint, ProjectionMatrix
   Normalize Vector3 DestPoint, DestPoint
   Multiply Vector3 DestPoint, 1000.0
   Transform Coords Vector3 DestPoint, DestPoint, ViewMatrix

   Distance#=Intersect Object(Obj, Camera Position X(), Camera Position Y(), Camera Position Z(), X Vector3(DestPoint), Y Vector3(DestPoint), Z Vector3(DestPoint))

   Set Vector3 DestPoint, (X Vector3(DestPoint)-Camera Position X()), (Y Vector3(DestPoint)-Camera Position Y()), (Z Vector3(DestPoint)-Camera Position Z())
   Normalize Vector3 DestPoint, DestPoint
   Multiply Vector3 DestPoint, Distance#
   Set Vector3 DestPoint, X Vector3(DestPoint)+Camera Position X(), Y Vector3(DestPoint)+Camera Position Y(), Z Vector3(DestPoint)+Camera Position Z()

   If Distance#>0.0
      IntersectionPointX#=X Vector3(DestPoint)
      IntersectionPointY#=Y Vector3(DestPoint)
      IntersectionPointZ#=Z Vector3(DestPoint)
   Else
      IntersectionPointX#=0.0
      IntersectionPointY#=0.0
      IntersectionPointZ#=0.0
   EndIf
EndFunction

Function GetIntersectionPointX()
EndFunction IntersectionPointX#

Function GetIntersectionPointY()
EndFunction IntersectionPointY#

Function GetIntersectionPointZ()
EndFunction IntersectionPointZ#

Function GetDistanceToObject()
EndFunction Distance#

Delete Memblock 1
Posted: 30th Jun 2003 11:50
TeePee your version of that line of code is pointless!
I think what is should be is:

if cax#>90.0 then cax#=90.0
Posted: 1st Jul 2003 9:08
true mate guess i wasnt thinking lol
Posted: 2nd Jul 2003 2:58
Wow neat code.

Is there any way this could be altered to get the x,y,z point on a normal matrix at the mouse pointer?

I havent a clue about vectors and I've been scratching my head over a similar problem to this for a while now.
Posted: 9th Jul 2003 15:43
Also, how come you cant create objects when using this code?

later
Nick
Posted: 9th Jul 2003 15:44
Great code by the way.
Posted: 10th Jul 2003 5:00
All sorted out.
Posted: 11th Jul 2003 2:59
hey, my names nick too....
Posted: 11th Jul 2003 9:20
hahaha, cool.
Posted: 12th Jul 2003 0:18
Excellent stuff