|
|
@@ -56,6 +56,14 @@ type |
|
|
|
|
|
|
|
class function Sub(const v1, v2: TVector2): TVector2; overload; inline; |
|
|
|
class function Sub(const v1, v2: TVector3): TVector3; overload; inline; |
|
|
|
|
|
|
|
class function ClampVal(const v, aMin, aMax: T): T; overload; inline; |
|
|
|
class function Clamp(const v, aMin, aMax: TVector2): TVector2; overload; inline; |
|
|
|
class function Clamp(const v, aMin, aMax: TVector3): TVector3; overload; inline; |
|
|
|
class function Clamp(const v, aMin, aMax: TVector4): TVector4; overload; inline; |
|
|
|
class function Clamp(const v: TVector2; const aMin, aMax: T): TVector2; overload; inline; |
|
|
|
class function Clamp(const v: TVector3; const aMin, aMax: T): TVector3; overload; inline; |
|
|
|
class function Clamp(const v: TVector4; const aMin, aMax: T): TVector4; overload; inline; |
|
|
|
end; |
|
|
|
|
|
|
|
generic TgluVectorHelperF<T> = class(specialize TgluVectorHelperI<T>) |
|
|
@@ -77,14 +85,6 @@ type |
|
|
|
class function Angle(const v1: TVector2; const v2: TVector2): Double; overload; inline; |
|
|
|
class function Angle(const v1: TVector3; const v2: TVector3): Double; overload; inline; |
|
|
|
class function Angle2(const v1: TVector2; const v2: TVector2): Double; overload; inline; |
|
|
|
|
|
|
|
class function ClampVal(const v, aMin, aMax: T): T; overload; inline; |
|
|
|
class function Clamp(const v, aMin, aMax: TVector2): TVector2; overload; inline; |
|
|
|
class function Clamp(const v, aMin, aMax: TVector3): TVector3; overload; inline; |
|
|
|
class function Clamp(const v, aMin, aMax: TVector4): TVector4; overload; inline; |
|
|
|
class function Clamp(const v: TVector2; const aMin, aMax: T): TVector2; overload; inline; |
|
|
|
class function Clamp(const v: TVector3; const aMin, aMax: T): TVector3; overload; inline; |
|
|
|
class function Clamp(const v: TVector4; const aMin, aMax: T): TVector4; overload; inline; |
|
|
|
end; |
|
|
|
|
|
|
|
TgluVectorP = specialize TgluVectorHelper<Pointer>; |
|
|
@@ -433,6 +433,57 @@ begin |
|
|
|
result[2] := v1[2] - v2[2]; |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperI.ClampVal(const v, aMin, aMax: T): T; |
|
|
|
begin |
|
|
|
if (v < aMin) then |
|
|
|
result := aMin |
|
|
|
else if (v > aMax) then |
|
|
|
result := aMax |
|
|
|
else |
|
|
|
result := v; |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperI.Clamp(const v, aMin, aMax: TVector2): TVector2; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin[0], aMax[0]); |
|
|
|
result[1] := ClampVal(v[1], aMin[1], aMax[1]); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperI.Clamp(const v, aMin, aMax: TVector3): TVector3; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin[0], aMax[0]); |
|
|
|
result[1] := ClampVal(v[1], aMin[1], aMax[1]); |
|
|
|
result[2] := ClampVal(v[2], aMin[2], aMax[2]); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperI.Clamp(const v, aMin, aMax: TVector4): TVector4; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin[0], aMax[0]); |
|
|
|
result[1] := ClampVal(v[1], aMin[1], aMax[1]); |
|
|
|
result[2] := ClampVal(v[2], aMin[2], aMax[2]); |
|
|
|
result[3] := ClampVal(v[3], aMin[3], aMax[3]); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperI.Clamp(const v: TVector2; const aMin, aMax: T): TVector2; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin, aMax); |
|
|
|
result[1] := ClampVal(v[1], aMin, aMax); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperI.Clamp(const v: TVector3; const aMin, aMax: T): TVector3; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin, aMax); |
|
|
|
result[1] := ClampVal(v[1], aMin, aMax); |
|
|
|
result[2] := ClampVal(v[2], aMin, aMax); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperI.Clamp(const v: TVector4; const aMin, aMax: T): TVector4; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin, aMax); |
|
|
|
result[1] := ClampVal(v[1], aMin, aMax); |
|
|
|
result[2] := ClampVal(v[2], aMin, aMax); |
|
|
|
end; |
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
//TgluVectorHelperF///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
|
|
@@ -521,56 +572,5 @@ begin |
|
|
|
v2[0] * v1[0] + v2[1] * v1[1]); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperF.ClampVal(const v, aMin, aMax: T): T; |
|
|
|
begin |
|
|
|
if (v < aMin) then |
|
|
|
result := aMin |
|
|
|
else if (v > aMax) then |
|
|
|
result := aMax |
|
|
|
else |
|
|
|
result := v; |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperF.Clamp(const v, aMin, aMax: TVector2): TVector2; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin[0], aMax[0]); |
|
|
|
result[1] := ClampVal(v[1], aMin[1], aMax[1]); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperF.Clamp(const v, aMin, aMax: TVector3): TVector3; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin[0], aMax[0]); |
|
|
|
result[1] := ClampVal(v[1], aMin[1], aMax[1]); |
|
|
|
result[2] := ClampVal(v[2], aMin[2], aMax[2]); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperF.Clamp(const v, aMin, aMax: TVector4): TVector4; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin[0], aMax[0]); |
|
|
|
result[1] := ClampVal(v[1], aMin[1], aMax[1]); |
|
|
|
result[2] := ClampVal(v[2], aMin[2], aMax[2]); |
|
|
|
result[3] := ClampVal(v[3], aMin[3], aMax[3]); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperF.Clamp(const v: TVector2; const aMin, aMax: T): TVector2; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin, aMax); |
|
|
|
result[1] := ClampVal(v[1], aMin, aMax); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperF.Clamp(const v: TVector3; const aMin, aMax: T): TVector3; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin, aMax); |
|
|
|
result[1] := ClampVal(v[1], aMin, aMax); |
|
|
|
result[2] := ClampVal(v[2], aMin, aMax); |
|
|
|
end; |
|
|
|
|
|
|
|
class function TgluVectorHelperF.Clamp(const v: TVector4; const aMin, aMax: T): TVector4; |
|
|
|
begin |
|
|
|
result[0] := ClampVal(v[0], aMin, aMax); |
|
|
|
result[1] := ClampVal(v[1], aMin, aMax); |
|
|
|
result[2] := ClampVal(v[2], aMin, aMax); |
|
|
|
end; |
|
|
|
|
|
|
|
end. |
|
|
|
|