+procedure TglcFrustum.UpdateProjMatrix;
+begin
+ if fIsOrthogonal then begin
+ fProjMatrix[maAxisX] := gluVector4f(
+ 2 / (fRight - fLeft),
+ 0,
+ 0,
+ 0);
+ fProjMatrix[maAxisY] := gluVector4f(
+ 0,
+ 2 / (fTop - fBottom),
+ 0,
+ 0);
+ fProjMatrix[maAxisZ] := gluVector4f(
+ 0,
+ 0,
+ -2 / (fFar - fNear),
+ 0);
+ fProjMatrix[maPos] := gluVector4f(
+ -(fRight + fLeft) / (fRight - fLeft),
+ -(fTop + fBottom) / (fTop - fBottom),
+ -(fFar + fNear) / (fFar - fNear),
+ 1);
+ end else begin
+ fProjMatrix[maAxisX] := gluVector4f(
+ 2 * fNear / (fRight - fLeft),
+ 0,
+ 0,
+ 0);
+ fProjMatrix[maAxisY] := gluVector4f(
+ 0,
+ 2 * fNear / (fTop - fBottom),
+ 0,
+ 0);
+ fProjMatrix[maAxisZ] := gluVector4f(
+ (fRight + fLeft) / (fRight - fLeft),
+ (fTop + fBottom) / (fTop - fBottom),
+ -(fFar + fNear) / (fFar - fNear),
+ -1);
+ fProjMatrix[maPos] := gluVector4f(
+ 0,
+ 0,
+ -2 * fFar * fNear / (fFar - fNear),
+ 0);
+ end;
+end;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////