I realize it has been a while since I've posted to this thread but I'm having other issues involving vectors. The method I used above works just fine with some tweaking, but it just wasn't fast enough, so I decided to use vectors as NanoBrain suggested. I camer up with a code based on vectors, but there is something wrong with it and I just can't figure it out. This is the code I came up with:
`Calculate Plane Normals
FOR OBJNUM=2 TO TOTOBJ-XSEG#-1
IF OBJNUM=(XSEG#+1)*(ROWNUM)+1
INC ROWNUM
GOTO NEXTNORM
ENDIF
OBJPOSX1#=OBJECT POSITION X(OBJNUM+XSEG#+1):OBJPOSY1#=OBJECT POSITION Y(OBJNUM+XSEG#+1):OBJPOSZ1#=OBJECT POSITION Z(OBJNUM+XSEG#+1)
OBJPOSX2#=OBJECT POSITION X(OBJNUM):OBJPOSY2#=OBJECT POSITION Y(OBJNUM):OBJPOSZ2#=OBJECT POSITION Z(OBJNUM)
OBJPOSX3#=OBJECT POSITION X(OBJNUM+XSEG#+2):OBJPOSY3#=OBJECT POSITION Y(OBJNUM+XSEG#+2):OBJPOSZ3#=OBJECT POSITION Z(OBJNUM+XSEG#+2)
AX#=OBJPOSX1#-OBJPOSX2#
AY#=OBJPOSY1#-OBJPOSY2#
AZ#=OBJPOSZ1#-OBJPOSZ2#
BX#=OBJPOSX3#-OBJPOSX2#
BY#=OBJPOSY3#-OBJPOSY2#
BZ#=OBJPOSZ3#-OBJPOSZ2#
CROSS PRODUCT(AX#,AY#,AZ#,BX#,BY#,BZ#)
NORMAL#(OBJNUM,1,0)=VECTOR#(0)
NORMAL#(OBJNUM,1,1)=VECTOR#(1)
NORMAL#(OBJNUM,1,2)=VECTOR#(2)
NORMAL#(OBJNUM,1,3)=OBJECT POSITION X(OBJNUM)*NORMAL#(OBJNUM,1,0)+OBJECT POSITION Y(OBJNUM)*NORMAL#(OBJNUM,1,1)+OBJECT POSITION Z(OBJNUM)*NORMAL#(OBJNUM,1,2)
OBJPOSX1#=OBJECT POSITION X(OBJNUM+1):OBJPOSY1#=OBJECT POSITION Y(OBJNUM+1):OBJPOSZ1#=OBJECT POSITION Z(OBJNUM+1)
OBJPOSX2#=OBJECT POSITION X(OBJNUM+XSEG#+2):OBJPOSY2#=OBJECT POSITION Y(OBJNUM+XSEG#+2):OBJPOSZ2#=OBJECT POSITION Z(OBJNUM+XSEG#+2 )
OBJPOSX3#=OBJECT POSITION X(OBJNUM):OBJPOSY3#=OBJECT POSITION Y(OBJNUM):OBJPOSZ3#=OBJECT POSITION Z(OBJNUM)
AX#=OBJPOSX1#-OBJPOSX2#
AY#=OBJPOSY1#-OBJPOSY2#
AZ#=OBJPOSZ1#-OBJPOSZ2#
BX#=OBJPOSX3#-OBJPOSX2#
BY#=OBJPOSY3#-OBJPOSY2#
BZ#=OBJPOSZ3#-OBJPOSZ2#
CROSS PRODUCT(AX#,AY#,AZ#,BX#,BY#,BZ#)
NORMAL#(OBJNUM,2,0)=VECTOR#(0)
NORMAL#(OBJNUM,2,1)=VECTOR#(1)
NORMAL#(OBJNUM,2,2)=VECTOR#(2)
NORMAL#(OBJNUM,2,3)=OBJECT POSITION X(OBJNUM+XSEG#+2)*NORMAL#(OBJNUM,2,0)+OBJECT POSITION Y(OBJNUM+XSEG#+2)*NORMAL#(OBJNUM,2,1)+OBJECT POSITION Z(OBJNUM+XSEG#+2)*NORMAL#(OBJNUM,2,2)
NEXTNORM:
NEXT OBJNUM
`Calculate where the mouse is relative to the matrix
PICKSCREEN(MOUSEX(),MOUSEY())
CAMX#=CAMERA POSITION X()
CAMY#=CAMERA POSITION Y()
CAMZ#=CAMERA POSITION Z()
FOR OBJNUM=2 TO TOTOBJ-XSEG#-1
IF OBJNUM=(XSEG#+1)*(ROWNUM)+1
INC ROWNUM
GOTO NEXTTEX
ENDIF
CONSTANT#=NORMAL#(OBJNUM,1,3)-(CAMX#*NORMAL#(OBJNUM,1,0)+CAMY#*NORMAL#(OBJNUM,1,1)+CAMZ#*NORMAL#(OBJNUM,1,2))
CONSTANT#=CONSTANT#/(VECTOR#(0)*NORMAL#(OBJNUM,1,0)+VECTOR#(1)*NORMAL#(OBJNUM,1,1)+VECTOR#(2)*NORMAL#(OBJNUM,1,2))
IF CLOSESTU#>0.0
IF CONSTANT#<=0.0 OR CLOSESTU#>CONSTANT# THEN GOTO NEXTPLANE
ELSE
IF CONSTANT#<=0.0 THEN GOTO NEXTPLANE
ENDIF
INTERCEPTX#=CAMX#+(CONSTANT#*VECTOR#(0))
INTERCEPTZ#=CAMZ#+(CONSTANT#*VECTOR#(2))
IF INTERCEPTX#<OBJECT POSITION X(OBJNUM) OR INTERCEPTX#>OBJECT POSITION X(OBJNUM+1) THEN GOTO NEXTPLANE
IF INTERCEPTZ#<OBJECT POSITION Z(OBJNUM) OR INTERCEPTZ#>OBJECT POSITION Z(OBJNUM+XSEG#+1) THEN GOTO NEXTPLANE
IF ZINT#(OBJNUM)>INTERCEPTZ#-(INTERCEPTX#*SLOPE#) THEN GOTO NEXTPLANE
CLOSESTOBJ=OBJNUM
CLOSESTU#=CONSTANT#
NEXTPLANE:
CONSTANT#=NORMAL#(OBJNUM,2,3)-(CAMX#*NORMAL#(OBJNUM,2,0)+CAMY#*NORMAL#(OBJNUM,2,1)+CAMZ#*NORMAL#(OBJNUM,2,2))
CONSTANT#=CONSTANT#/(VECTOR#(0)*NORMAL#(OBJNUM,2,0)+VECTOR#(1)*NORMAL#(OBJNUM,2,1)+VECTOR#(2)*NORMAL#(OBJNUM,2,2))
IF CLOSESTU#>0.0
IF CONSTANT#<=0.0 OR CLOSESTU#>CONSTANT# THEN GOTO NEXTTEX
ELSE
IF CONSTANT#<=0.0 THEN GOTO NEXTTEX
ENDIF
INTERCEPTX#=CAMX#+(CONSTANT#*VECTOR#(0))
INTERCEPTZ#=CAMZ#+(CONSTANT#*VECTOR#(2))
IF INTERCEPTX#<OBJECT POSITION X(OBJNUM) OR INTERCEPTX#>OBJECT POSITION X(OBJNUM+1) THEN GOTO NEXTTEX
IF INTERCEPTZ#<OBJECT POSITION Z(OBJNUM) OR INTERCEPTZ#>OBJECT POSITION Z(OBJNUM+XSEG#+1) THEN GOTO NEXTTEX
IF ZINT#(OBJNUM)<INTERCEPTZ#-(INTERCEPTX#*SLOPE#) THEN GOTO NEXTTEX
CLOSESTOBJ=OBJNUM
CLOSESTU#=CONSTANT#
NEXTTEX:
NEXT OBJNUM
`functions
FUNCTION CROSS PRODUCT(AX#,AY#,AZ#,BX#,BY#,BZ#)
VECTOR#(0)=(AY#*BZ#)-(AZ#*BY#)
VECTOR#(1)=(AZ#*BX#)-(AX#*BZ#)
VECTOR#(2)=(AX#*BY#)-(AY#*BX#)
ENDFUNCTION
FUNCTION PICKSCREEN(XPOINT,YPOINT)
` CALCULATE HALF THE SCREEN WIDTH AND HEIGHT
` SUBTRACT 1 BECAUSE POINTS START AT (0,0), NOT (1,1)
HALFSW#=(SCREEN WIDTH()-1)
HALFSW#=HALFSW#/2
HALFSH#=(SCREEN HEIGHT()-1)
HALFSH#=HALFSH#/2
` CALCULATE 3D COORDINATE OF SCREEN POINT ASSUMING CAMERA ISN'T ROTATED AND IS AT POSITION 0,0,0
XPOINT#=XPOINT
YPOINT#=YPOINT
XPOINT#=XPOINT-HALFSW#
YPOINT#=HALFSH#-YPOINT
XVEC#=.8*(XPOINT#/HALFSW#)
YVEC#=.6*(YPOINT#/HALFSH#)
ZVEC#=1
` CALCULATE LENGTH FROM CAMERA POINT TO 3D SCREEN POINT
LENGTH#=SQRT((XVEC#*XVEC#)+(YVEC#*YVEC#)+(ZVEC#*ZVEC#))
` MAKE VECTOR A UNIT VECTOR
XVEC#=(XVEC#/LENGTH#)
YVEC#=(YVEC#/LENGTH#)
ZVEC#=(ZVEC#/LENGTH#)
` CALULATE X-AXIS ROTATION RELATIVE TO CAMERA
OLDY#=YVEC#
OLDZ#=ZVEC#
YVEC#=(OLDY#*COS(CAMERA ANGLE X()))-(OLDZ#*SIN(CAMERA ANGLE X()))
ZVEC#=(OLDY#*SIN(CAMERA ANGLE X()))+(OLDZ#*COS(CAMERA ANGLE X()))
` CALCULATE Y-AXIS ROTATION RELATIVE TO CAMERA
OLDX#=XVEC#
OLDZ#=ZVEC#
XVEC#=(OLDX#*COS(CAMERA ANGLE Y()))+(OLDZ#*SIN(CAMERA ANGLE Y()))
ZVEC#=(OLDZ#*COS(CAMERA ANGLE Y()))-(OLDX#*SIN(CAMERA ANGLE Y()))
` CALCULATE Z-AXIS ROTATION RELATIVE TO CAMERA
OLDX#=XVEC#
OLDY#=YVEC#
XVEC#=(OLDX#*COS(CAMERA ANGLE Z()))-(OLDY#*SIN(CAMERA ANGLE Z()))
YVEC#=(OLDX#*SIN(CAMERA ANGLE Z()))+(OLDY#*COS(CAMERA ANGLE Z()))
` CALCULATE THE VECTOR RELATIVE TO THE STANDARD AXIS RATHER THAN RELATIVE TO THE CAMERA
VECTOR#(0)=XVEC#+CAMERA POSITION X()
VECTOR#(1)=YVEC#+CAMERA POSITION Y()
VECTOR#(2)=ZVEC#+CAMERA POSITION Z()
ENDFUNCTION
The PickScreen() function is the same one I posted in the codebase but I reformed it so it always calculates a unit vector. Also, note that I have placed an object at the matrix vertices and the variable TOTOBJ refers to the number of objects on the vertices. Also, NORMAL(objnum,1,3) and NORMAL(objnum,2,3) are the K constants in the plane equation found in the website NanoBrain gave above. Basically what I am trying to do with this code is find out if (1) The vector the mouse directs from the camera intercepts each individual plane of the matrix and (2) If the vector intercepts the matrix between the three points of a matrix plane. I realize this is somewhat of a long code and post and I thank you in advance for any assistance you can render.
The force will be with you. Always.