var
{ Has to be global, since TObjectList.Sort
requires normal function (not "of object"). }
SortCameraPosition: TVector3;
function CompareFrontToBack3D(A, B: Pointer): Integer;
begin
// use TBox3D.CompareBackToFront3D and invert operands order
Result := TBox3D.CompareBackToFront3D(TCastleTransform(B).BoundingBox, TCastleTransform(A).BoundingBox,
SortCameraPosition);
end;
procedure SortTransformChildrenFrontToBack(const Items: TCastleTransform);
begin
SortCameraPosition := Viewport.Camera.Translation;
Items.Sort(@CompareFrontToBack3D);
end;
procedure TCastleTransform.SortBackToFront2D;
begin
SortBackToFront(bs2D, TVector3.Zero);
end;