Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [GLscene] dyn. Objekte zu langsam erzeugt (https://www.delphipraxis.net/18147-%5Bglscene%5D-dyn-objekte-zu-langsam-erzeugt.html)

dizzy 15. Mär 2004 15:20


[GLscene] dyn. Objekte zu langsam erzeugt
 
Mahlzeit Kameraden! :)

Habe ein eher ärgerliches Problem mit GLscene. In meinem Proggy brauche ich eine größere Anzahl von gleichen Würfeln, die der Szene dynamisch hinzugefügt werden sollen, da der User Größe (un somit auch Position) wählen können soll.

Folgendermaßen gehe ich z.Zt. vor:

Delphi-Quellcode:
Global:
var
  boxes : array of array of array of TCube;
  cubeCount: Integer = 20;

.
.
.


procedure GenerateCells;
var x, y, z : Integer;
    PosHelper: Single;
begin
  SetLength(boxes, cubeCount, cubeCount, cubeCount);

  PosHelper := -(cubeCount/4)-0.25;
  for x := 0 to cubeCount-1 do
   begin
     for y := 0 to cubeCount-1 do
      begin
        for z := 0 to cubeCount-1 do
         begin
           boxes[x,y,z] := TCube(Form1.GLScene1.Objects.AddNewChild(TCube));
           boxes[x,y,z].Position.X := PosHelper+(x*0.5);
           boxes[x,y,z].Position.Y := PosHelper+(y*0.5);
           boxes[x,y,z].Position.Z := PosHelper+(z*0.5);
           boxes[x,y,z].CubeWidth := 0.5;
           boxes[x,y,z].CubeHeight := 0.5;
           boxes[x,y,z].CubeDepth := 0.5;
           boxes[x,y,z].Visible := false;
         end;
      end;
   end;
end;
Das ganze wird auf Knopfdruck ausgeführt, und dauert bei 20³ Würfeln schon üppig lang. Nehme ich z.B. 25 dauert es erheblich länger, bei 30 hatte ich schon keine Lust mehr ganz abzuwarten. Es ist klar, dass das länger dauert, 25³ sind ja schonmal locker 15.625 Objekte á 6 Seiten. Es sind jedoch nicht zu jedem Zeitpunkt alle Würfel sichtbar, aber da pro Zeitzyklus teilweise sehr viele Würfel erzeugt/gekillt werden müssten, würde ich somit die Framerate sehr mekrbar drücken.
Es geht um das gute alte "Life"-Programm, in 3D. Daher diese Menge an Würfeln.

Wie würdet ihr daran gehen?

Habe auch schon getestet, 30³ Würfel erstellen, und dann die Szene abspeichern. Nur dauert das Lader der Szene dann NOCH länger, als das pure Erzeugen (was eigentlich auch logisch ist...). Zumal ich mir dann auch noch über die Würfelnamen die Referenzen in mein array holen müsste, was ja string-Operationen sind. Auch nicht DIE Lösung :gruebel:

Hülfeee :)


gruss,
dizzy

dizzy 17. Mär 2004 02:41

Re: [GLscene] dyn. Objekte zu langsam erzeugt
 
*vorsichtigpush* :duck:

Keiner eine klitzekleine Idee? Auch nicht irgendwas abwegiges eventuell?
Ich häng da blöd dran. Alles andere klappt :|

Pyr0cracker 17. Mär 2004 08:45

Re: [GLscene] dyn. Objekte zu langsam erzeugt
 
ich kenn mich nicht so gut mit glscene aus aber gibts da nicht sowas wie proxyobjekte?
guck dir mal das beispiel zu an...
vielleicht hilfts

gruß,

dizzy 17. Mär 2004 16:38

Re: [GLscene] dyn. Objekte zu langsam erzeugt
 
Hmmm... Proxys sind IMHO lediglich "leere" Objekte, die dazu dienen die Objekthirachie zu strukturieren. Eventuell hilft es aber, wenn ich die ganzen Würfel nicht unter nur EINEN Proxy packe, sonder auf mehrere verteile. Vielleicht verringert sich ja dann der "Verwaltungsaufwand" pro Proxy (so er existiert...), und das könnte ja beschleunigen. Mal testen! Danke für den Anstoß!

gruss,
dizzy


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz