Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#1

[GLscene] dyn. Objekte zu langsam erzeugt

  Alt 15. Mär 2004, 15:20
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

Hülfeee


gruss,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat