PDA

View Full Version : Quad selection...



M109uk
14-04-2005, 12:32 PM
Hi all,

I want to be able to select a Quad from my terrain, my using the mouse's position

my current code:

procedure QuadSelection;
var
X,Y,Dist,nDist: Single;
Mdl,Proj,UProj: TMatrix;
Eye,Mouse,v1,v2,v3,v4: TVertex3f;
H,W,i,a,b,c,Nearest: Integer;
begin
X := MouseX; // Defined in TPanel.OnMouseMove
Y := MouseY; // Defined in TPanel.OnMouseMove

X := 2*(X/GLPanel.Width)-1;
Y := 2*(Y/GLPanel.Height)-1;
Eye := Vertex3f(X, Y, -1);
Mouse := Vertex3f(X, Y, 1);

glGetFloatv(GL_MODELVIEW_MATRIX, @Mdl);
glGetFloatv(GL_PROJECTION_MATRIX, @Proj);
InvertMatrix(MatrixMultiply(Mdl, Proj), UProj);

Eye := ApplyMatrix(UProj, Eye);
Mouse := ApplyMatrix(UProj, Mouse);

Nearest := -1;
nDist := 1000;

For W := 0 To Terrain.Width-1 Do
For H := 0 To Terrain.Height-1 Do
Begin
v1 := Vertex3f(W*800.1, Terrain.Vertices[Terrain.Index(W,H)].Vertex, H*8.001);
v2 := Vertex3f((W*800.1)+1, Terrain.Vertices[Terrain.Index(W+1,H)].Vertex, H*8.001);
v3 := Vertex3f(W*800.1, Terrain.Vertices[Terrain.Index(W,H+1)].Vertex, (H*8.001)+1);
v3 := Vertex3f((W*800.1)+1, Terrain.Vertices[Terrain.Index(W+1,H+1)].Vertex, (H*8.001)+1);
Dist := Intersection(Eye, Mouse, v1, v2, v3);
If (Dist >= 0) And (Dist <= nDist) Then
Begin
Nearest := W+H;
nDist := Dist;
End;
End;

If Nearest < 0 Then Exit;

glDisable(GL_DEPTH_TEST);
glColor3f(1, 0.5, 0.5);

v1[1] := v1[1]+1;
v2[1] := v2[1]+1;
v3[1] := v3[1]+1;
v4[1] := v4[1]+1;

glBegin(GL_QUADS);
glVertex3fv(@v1);
glVertex3fv(@v2);
glVertex3fv(@v3);
glVertex3fv(@v4);
glEnd;
glEnable(GL_DEPTH_TEST);


but this isnt working and i cant see whats going wrong and woundering if any one else can see any problems..

Thanx