- type
- TVertexArray = Record
- Vertex: Array of Array[1..4] of Array[0..2] of Single;
- Normals: Array of Array[1..4] of Array[0..2] of Single;
- TexCoord: Array of Array[1..4] of Array[0..1] of Single;
- Matrix: TMatrix;
- Typ: Cardinal;
- end;
- procedure CreateField;
- var
- F, x, y, i: Integer;
- XCen, ZCen, XDiv, ZDiv: Single;
- begin
- XDiv:=FWidth / FDivisions;
- ZDiv:=FHeight / FDivisions;
- XCen:=FX - (FWidth / 2);
- ZCen:=FZ - (FHeight / 2);
- SetLength(FVertexArray.Vertex,FDivisions * FDivisions);
- SetLength(FVertexArray.Normals,FDivisions * FDivisions);
- SetLength(FVertexArray.TexCoord,FDivisions * FDivisions);
- for x:=1 to FDivisions do begin
- for y:=1 to FDivisions do begin
- F:=((x-1) * FDivisions) + y - 1;
- for i:=1 to 4 do begin
- case i of
- 1: begin
- FVertexArray.Vertex[F,i,0]:=XCen + (x * XDiv);
- FVertexArray.Vertex[F,i,1]:=FY;
- FVertexArray.Vertex[F,i,2]:=ZCen + (y * ZDiv);
- end;
- 2: begin
- FVertexArray.Vertex[F,i,0]:=XCen + (x * XDiv) + XDiv;
- FVertexArray.Vertex[F,i,1]:=FY;
- FVertexArray.Vertex[F,i,2]:=ZCen + (y * ZDiv);
- end;
- 3: begin
- FVertexArray.Vertex[F,i,0]:=XCen + (x * XDiv) + XDiv;
- FVertexArray.Vertex[F,i,1]:=FY;
- FVertexArray.Vertex[F,i,2]:=ZCen + (y * ZDiv) + ZDiv;
- end;
- 4: begin
- FVertexArray.Vertex[F,i,0]:=XCen + (x * XDiv);
- FVertexArray.Vertex[F,i,1]:=FY;
- FVertexArray.Vertex[F,i,2]:=ZCen + (y * ZDiv) + ZDiv;
- end;
- end;
- FVertexArray.Normals[F,i,0]:=0;
- FVertexArray.Normals[F,i,1]:=1;
- FVertexArray.Normals[F,i,2]:=0;
- FVertexArray.TexCoord[F,i,0]:=0;
- FVertexArray.TexCoord[F,i,1]:=0;
- end;
- end;
- end;
- FVertexArray.Typ:=GL_QUADS;
- end;
- procedure Draw;
- begin
- glPushMatrix;
- glVertexPointer(3,GL_FLOAT,12,FVertexArray.Vertex);
- glTexCoordPointer(2,GL_FLOAT,8,FVertexArray.TexCoord);
- glNormalPointer(GL_FLOAT,12,FVertexArray.Normals);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glDrawArrays(FVertexArray.Typ,0,Length(FVertexArray.Vertex));
- glPopMatrix;
- end;