Hallo.
Ich habe diverse Punkte als Ausgangsbasis und möchte sowohl Punktwolken, also auch diese mit Linien verbinden oder gar ein Object darstellen. Ich habe alles realisiert, aber es ist extrem langsam und bei einer Aufbauzeit von
15-20s nicht in der Form brauchbar. Vielleicht kann mir jemand sagen ob ich hier was falsch mache oder es einfach so langsam ist? Wenn ich das selbe unten beschriebene Prinzip mit GLLines und GLPoints mache, dann ist es nur 1-2s bis alles angezeigt wird.
Code:
procedure TForm1.UpdateSceneMesh();
var
nodes: TVectorList;
procedure DrawPolygon(nodes: TVectorList; LineColor : TGLColor);
var
i : Integer;
GLPolygon : TGLPolygon;
begin
GLPolygon := TGLPolygon(GLDummyCube1.AddNewChild(TGLPolygon));
GLPolygon.BeginUpdate;
GLPolygon.Material.FrontProperties.Emission.Color := LineColor.Color;
for i := 0 to nodes.Count - 1 do
begin
GLPolygon.AddNode(nodes.Items[i]);
end;
GLPolygon.EndUpdate;
end;
begin
GLDummyCube1.DeleteChildren;
GLDummyCube1.BeginUpdate;
nodes := TVectorList.Create;
{
Hier lese ich meine Punkte in ein Array ein und leere bei jedem Schleifendurchlauf die TVectorList, welche am Ende der Schleife aus den hinzugefügten Vectoren ein neues Polygon erstellt.
}
for i:= 0 to count - 1 do
begin
nodes.Clear;
nodes.AddPoint(Vector3f(x,y,z));
nodes.AddPoint(Vector3f(x..,y..,z..));
nodes.AddPoint(Vector3f(x..,y..,z..));
nodes.AddPoint(Vector3f(x..,y..,z..));
DrawPolygon(nodes,clrGreen);
end;
end;
Das ist jetzt vereinfacht dargestellt, damit man den Code besser überschauen kann. Fehlt mir hier irgendwo ein BeginUpdate/EndUpdate oder erstelle ich gar das Polygon auf einer gänzlich falschen Art und Weise?