SOLUTION
create your plain like this
Make Object Plain Surface, 100, 100,
1
EDIT:
and here's the code
Rem Project: Dark Basic Pro Project
Rem Created: Saturday, June 30, 2012
Rem ***** Main Source File *****
sync on
set camera range 1,25000
Type Point3D
X#
Y#
Z#
EndType
Type Polygon
Object
P As Point3D
A As Point3D
B As Point3D
C As Point3D
Poly
Limb
EndType
Global PickedPolygon As Polygon
Global Surface : Surface = 1 //NextObject()
Make Object Plain Surface, 100, 100,1
set object wireframe surface,1
Do
mx=mousex()
my=mousey()
If MouseClick() = 0 Then MouseLeft = 0
PickedPolygon.Object=0
PickedPolygon.Object = Pick Object(MX, MY, Surface, Surface)
If MouseClick() = 1 And MouseLeft = 0 and PickedPolygon.Object>0
PickedPolygon.Limb = DK Pick Limb(0, MX#, MY#, PickedPolygon.Object, 0, Get Limb Count(PickedPolygon.Object))
PickedPolygon.Poly = DK Get Pick Poly()
PickedPolygon.P.X# = Get Pick Vector X() + Camera Position X()
PickedPolygon.P.Y# = Get Pick Vector Y() + Camera Position Y()
PickedPolygon.P.Z# = Get Pick Vector Z() + Camera Position Z()
poly=0
Lock VertexData For Limb PickedPolygon.Object, 0
VertexCount = Get VertexData Vertex Count()
polys=VertexCount/3
for i=1 to polys
X# = PickedPolygon.P.X#
Y# = PickedPolygon.P.Y#
Z# = PickedPolygon.P.Z#
P As Point3D
P.X# = X#
P.Y# = Y#
P.Z# = Z#
i1=(i-1)*3+0
i2=(i-1)*3+1
i3=(i-1)*3+2
X1# = Get VertexData Position X(i1)
Y1# = Get VertexData Position Y(i1)
Z1# = Get VertexData Position Z(i1)
A As Point3D
A.X# = X1#
A.Y# = Y1#
A.Z# = Z1#
X2# = Get VertexData Position X(i2)
Y2# = Get VertexData Position Y(i2)
Z2# = Get VertexData Position Z(i2)
B As Point3D
B.X# = X2#
B.Y# = Y2#
B.Z# = Z2#
X3# = Get VertexData Position X(i3)
Y3# = Get VertexData Position Y(i3)
Z3# = Get VertexData Position Z(i3)
C As Point3D
C.X# = X3#
C.Y# = Y3#
C.Z# = Z3#
InTriangle = PointInTRI(P,A,B,C) `PointInTriangle(P, A, B, C) `PointinTriangle(x#, y#, x1#, y1#, x2#, y2#, x3#, y3#)
If InTriangle = 1
poly=i
exit
endif
next i
Unlock VertexData
Mouseleft = 1
EndIf
text 20,20, Str$(PickedPolygon.Poly)
text 20,40, Str$(Poly)
text 20,100,str$(PickedPolygon.P.X#)
text 20,120,str$(PickedPolygon.P.y#)
text 20,140,str$(PickedPolygon.P.z#)
sync
Loop
function PointInTRI(pv as Point3D,av as Point3D,bv as Point3D,cv as Point3D)
v1 as integer
v2 as integer
v3 as integer
v1=SameSide(pv,av,bv,cv)
v2=SameSide(pv,bv,av,cv)
v3=SameSide(pv,cv,av,bv)
if v1=1 and v2=1 and v3=1
result=1
else
result=0
endif
endfunction result
function SameSide(p1 as Point3D,p2 as Point3D,av as Point3D,bv as Point3D)
t1 as Point3D : t2 as Point3D : t3 as Point3D
r1 as Point3D : r2 as Point3D
t1.X#=bv.X#-av.X#
t1.Y#=bv.Y#-av.Y#
t2.X#=p1.X#-av.X#
t2.Y#=p1.Y#-av.Y#
t3.X#=p2.X#-av.X#
t3.Y#=p2.Y#-av.Y#
r1.z#=(t1.X#*t2.Y#) - (t1.Y#*t2.X#)
r2.z#=(t1.X#*t3.Y#) - (t1.Y#*t3.X#)
dotp#=(r1.Z#*r2.Z#)
if dotp# >= 0
result=1
else
result=0
endif
endfunction result