Here's the code I used (you'll probably have to add GLCrossPlatform to the uses):
[pascal]
procedure TForm1.FormCreate(Sender: TObject);

{ .: AddNodes :. }
function AddNodes(ANode: TTreeNode; AObject: TGLBaseSceneObject): TTreeNode;
var
I: Integer;
CurrentNode: TTreeNode;
begin
if IsSubComponent(AObject) then
begin
Result := TreeView1.Selected;
exit;
end else
begin
Result := TreeView1.Items.AddChildObject(ANode, AObject.Name, AObject);
CurrentNode := Result;
for I := 0 to AObject.Count -1 do
Result := AddNodes(CurrentNode, AObject[I]);
end;
end;

var
I: Integer;
CameraNode, ObjectNode: TTreeNode;
begin
// -- add two root nodes --
ObjectNode := TreeView1.Items.AddFirst(nil, 'Scene objects');
CameraNode := TreeView1.Items.AddFirst(nil, 'Cameras');

// -- get the object's tree --
TreeView1.Items.BeginUpdate();
with GLScene1 do
begin
// -- cameras --
if Assigned(Cameras) then
begin
CameraNode.Data := Cameras;
for I := 0 to Cameras.Count -1 do
AddNodes(CameraNode, Cameras[I]);
CameraNode.Expand(True);
end;

// -- objects (with children too) --
if Assigned(Objects) then
begin
ObjectNode.Data := Objects;
with Objects do
for I := 0 to Count -1 do
AddNodes(ObjectNode, Children[I]);
ObjectNode.Expand(True);
end;
end;
TreeView1.Items.EndUpdate();
end;
[/pascal]