Ich habe ein kleines PartikelSystem programmiert wobei ich aber Probleme mit der Performance habe.
Liegt es jetzt an der Anzahl der Dreicke? Dann müsste doch die Performance besser werden wenn ich die Partikel Grösse erhöhe und die Anzahl verringere. Das trifft aber nicht zu. 10000 QUADS sollten doch kein Problem sein oder?
Code:
type
TPartikel =class
protected
Color: TGLColor;
LifeTime:int64;
StartTime:int64;
x,y,z:double;
speedx, speedy, speedz:double;
alpha:double;
size:double;
public
procedure setSize(aSize:double);
procedure setPositions(ax, ay, az:double);
procedure paint(const Right,Up,View: TVektor);
functionmove(vergangendeZeit:int64):boolean;//result=Kollision mit Rand
constructor CreateParam(ax, ay, az, axspeed, ayspeed, azspeed:double; aLifetime:int64; aColor: TGLColor);
Ich bin mir nicht sicher, aber kann es nicht sein, dass hier die CPU ein wenig zu leiden hat ?
So wie ich das sehe ist bei dir jedes Partikel eine eigene Klasse mit vielen untertypen. ich habe versucht, meine partikel so minimalistisch wie möglich zu gestalten, also records mit wenigen informationen und so viel es geht in den emitter auslagern.
des weiteren solltest du schauen, ob du immer alle 10000 partikel zeichnen musst, oder ob du zB Frustrum culling einsetzen kannst.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
In jedem Falle solltest du die Zeiten messen die die einzelnen Funktionen benötigen. Dazu solltest du dir mal QueryPerformanceFrequency und QueryPerformanceCounter etwas näher anschauen. Denn dann kannst du erst richtig abschätzen was wie lange die einzelnen Teile benötigen.
Was ich persönlich ziemlich häftig finde ist das Paint des einzelnen Partikels. Dort musst du für jede kleine Koordinate extra eine Berechnung anwerfen. Ich würde versuchen das so einfach wie möglich zu gestalten. So viel wie möglich vorberechnen etc. Denn solche Berechnungen finden auf der FPU statt und eine zu starke vermischung zwischen FPU und CPU bringt Delphi etwas aus dem Tritt. Also so etwas sind stellen die immer gut Zeit benötigen.
Evtl könnte es auch einiges bringen zuvor die Punkte in ein VBO zu schreiben und dann dieses zu rendern. Evtl geht es schneller, da du derzeit bei jedem Quad warten musst bist die Grafikkarte fertig ist und so würdest du es in einen Speicher packen und anschließend nur sagen zeichnen. Wärend die Grafikkarte dann die Punkte zeichnet könntest du schon wieder andere Sachen machen, da das ganze ja asynchron abläuft.
Mitglieder in diesem Forum: 0 Mitglieder und 20 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.