Einzelnen Beitrag anzeigen

Maiky

Registriert seit: 14. Nov 2006
54 Beiträge
 
#1

GLScene: Frage bezüglich dem erstellen von Primitives etc.

  Alt 25. Okt 2012, 10:10
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?

Geändert von Maiky (25. Okt 2012 um 11:07 Uhr)
  Mit Zitat antworten Zitat