Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 10, 2025 02:52

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Mai 17, 2009 21:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hallo...

Also ich bin gerade dabei erstmal ein paar Performanceverbesserung an meinem Projekt durchzuführen.
Habe eben schon einiges in Displaylisten gepackt... echt super ;-)

Jetzt will ich die Berechnung implementieren...
Wie mache ich das wohl am besten?
In nem Timer und jede Sekunde 1 mal? (es wird nicht sooo oft benötigt)
Oder beim Rendern mit reingepackt und dann durch den timestamp halt auch nur jede sekunde rendern?

Oder was ist die beste Lösung???

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 17, 2009 21:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Was willst du denn berechnen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 17, 2009 22:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
- Um wieviel die bevölkerung der planeten ansteigt
- wo die raumschiffe bisdahin geflogen sind
- den fortschritt der entwicklung/forschung
usw

Alles auf der basis eines strategiespiels ...
Also Daten, die nich "flüssig" benötigt werden.

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 17, 2009 22:43 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Ich würde das mit dem Timestamp machen. Der Delphi Timer ist eh rotz und son paar Formeln werden deine cpu schon nicht in die Knie zwingen, es sei denn das deine Bevölkerung aus 25 faktoren, vielen trigonometrischen funktionen, Integralen und Matrizen transformationen besteht.

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 18, 2009 03:15 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Naja, bei vielen Planeten und anderen Zeug kann ich mir schon vorstellen, dass das recht lange dauert.
Wenn die Berechnungen nur sehr simpel und wenige sind kann man das wohl auch bei jedem Frame machen. Wenn es dann schon etwas länger dauert, kann man auch nur alle x Millisekunden machen, aber trotzdem in der Render-Procedur. Mit einer Variablen, die die Zeit beim letzten Berechnen gespeichert hat und mit Gettickcount jedesmal überprüfen ob die Zeitdifferenz die Schwelle überschritten hat.
Falls die Berechnungen aber richtig lange brauchen (ca 50-100ms) würde das Bild stocken. Dazu fällt mir nur ein einen Thread für die Berechnungen laufen zu lassen und am Ende der Berechnung das Ergebnis in die Variablen zum Rendern schreiben, weil ich mal annehme das die Berechnungen das Bild beeinflussen und bei Threads muss man ja immer aufpassen. Ich mein das so ähnlich wie Front- und Backbuffer.
Allerdings bin ich auch nicht so der Threadexperte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 18, 2009 07:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 20, 2005 13:18
Beiträge: 1054
Wohnort: Dresden
Programmiersprache: C, C++, Pascal, OPL
Hm, also ich mache das so, dass ich alle Daten, die auch zum Zeichnen gebraucht werden, in einer Struktur kapsel. Dann mache ich eine Kopie der Daten, gebe sie der Zeichenfunktion und rufe die Berechnenfunktion mit den ORIGINAL Daten auf. Wenn die Zeichenfunktion terminiert ist, warte ich auf die Berechnenfunktion (wenn sie nicht sogar schon vorher terminiert ist) und dann gehts weiter. Natürlich ist bei dieser Darstellung time-based Movement noch nicht betrachtet, aber das ist dann nur eine Kleinigkeit. Hintergedanke ist, dass in der Zeichenfunktion (theoretisch) ja vorallem die Grafikkarte arbeitet, so würde es immer einen Wechsel geben ohne Threads: CPU, GPU, CPU, GPU. Aber das ist nur Theorie, ob es wirklich was bringt, weiß ich nicht. :lol:
Was Latenzen angeht, dürften diese auch nicht größer sein als bei einer Nicht-Thread-Methode. Denn ob ich nun Rechne und zeichne oder Rechne und instant im nächsten Step zeichne - da liegt ein Unterschied von maximal 1ms (durch timebased Movement).

Nur eine Sache muss DRINGEND bedacht werden: Die Funktion für die Berechnungen kann KEINE OpenGL-Befehle ausführen - zumindest nicht mit SDL, weil OpenGL nicht weiß an welchen RC sich die Befehle richten. Also bieten sich hier zwei Berechnenfunktionen an oder man packt die Berechnungen in die Zeichenfunktion - nimmt sich nichts, denke ich.

LG Ziz

_________________
Denn wer nur schweigt, weil er Konflikte scheut, der macht Sachen, die er hinterher bereut.
Und das ist verkehrt, denn es ist nicht so schwer, jeden Tag zu tun als ob's der letzte wär’.
Und du schaust mich an und fragst ob ich das kann.
Und ich denk, ich werd' mich ändern irgendwann.

_________________Farin Urlaub - Bewegungslos


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 17, 2009 00:59 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
das thema ist ja schon etwas älter, aber ich geb trozdem mal meien senf dazu, vill hilft es ja.

wie wäre es denn, abhängig von der durch gettickcount ermittelten zeit im rendervorgang jeweils eine berechnung durchzuführen, und das ergebnis zb jede sekunde zu aktualisieren? ich würde mir das mit ner case abfrage vorstellen, und so sollte sich die benötigte rechenleistung auf diverse frames verteilen. wobei ich mir sicher bin, das dass die anfängergeeignete methode ist, threads zu umgehen und bei weitem nicht optimal^^

dazu muss ich sagen, denke ich ich, dass normale berechnungen mit formeln etc sehr schnell unter delphi (hab keinen vergleich^^) laufen. meine primitive kollision aus einem älteren spiel hat immerhin jeden frame auf meinem rechner 300 objekte mit jedem anderen objekt kollidieren lassen können (macht 300*299 kollisionen), ich hab viel pythagoas benutzt, viele if abfragen, und alles lief zufriedenstellend schnell. ich denke es ist unwahrscheinlich, dass dein game derartig komplex ist, dass du es nicht auch jeden frame tuen könntest. optimierungstechnisch wäre aber eine andere lösung definitiv sinvoller. threads klingt am besten, aber auch am kompliziertesten^^

gruß, robin


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]