Try this version, use the same texture as you posted before, it renders 3 quads, uses some vector math to avoid messing with rotations.
Code:
Procedure DrawLine(const PStart: TVector2f; const PEnd: TVector2f; Width: Single);
var Vector : TVector2f;
var Normal : TVector2f;
var NXW: Single;
var NYW: Single;
var VXW: Single;
var VYW: Single;
begin
Vector.X:= PEnd.X - PStart.X;
Vector.Y:= PEnd.Y - PStart.Y;
Vector:= Normalize(Vector);
// Calculate the normal to the vector
Normal.X:= -Vector.Y;
Normal.Y:= Vector.X;
// Precompute the factors
NXW:= Normal.X * Width;
NYW:= Normal.Y * Width;
VXW:= Vector.X * Width;
VYW:= Vector.Y * Width;
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
// First quad
glTexCoord2f(0.0, 0.5); glVertex2f(PStart.X - NXW + VYW, PStart.Y - NYW + VYW);
glTexCoord2f(1.0, 0.5); glVertex2f(PStart.X + NXW + VYW, PStart.Y + NYW + VYW);
glTexCoord2f(1.0, 0.5); glVertex2f(PEnd.X + NXW - VYW, PEnd.Y + NYW - VYW);
glTexCoord2f(0.0, 0.5); glVertex2f(PEnd.X - NXW - VYW, PEnd.Y - NYW - VYW);
// Middle quad
glTexCoord2f(0.0, 0.0); glVertex2f(PStart.X - NXW , PStart.Y - NYW);
glTexCoord2f(1.0, 0.0); glVertex2f(PStart.X + NXW , PStart.Y + NYW);
glTexCoord2f(1.0, 0.5); glVertex2f(PStart.X + NXW + VXW, PStart.Y + NYW + VYW);
glTexCoord2f(0.0, 0.5); glVertex2f(PStart.X - NXW + VXW, PStart.Y - NYW + VYW);
// End quad
glTexCoord2f(0.0, 0.0); glVertex2f(PEnd.X - NXW , PEnd.Y - NYW);
glTexCoord2f(1.0, 0.0); glVertex2f(PEnd.X + NXW , PEnd.Y + NYW);
glTexCoord2f(1.0, 0.5); glVertex2f(PEnd.X + NXW - VXW, PEnd.Y + NYW - VYW);
glTexCoord2f(0.0, 0.5); glVertex2f(PEnd.X - NXW - VXW, PEnd.Y - NYW - VYW);
glEnd();
end;
Bookmarks