JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Performance verbessern
Gehe zu Seite Zurück  1, 2, 3
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Zyrian
Super JLI'ler



Anmeldedatum: 30.08.2003
Beiträge: 321
Wohnort: Essen
Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 12:19    Titel: Antworten mit Zitat

also so ungefähr?

Code:

class node
{
public:
    // Methoden ...


private:   
    node* child1;
    node* child2;
    node* child3;
    node* child4;

    CSprite* pSprite;
}

_________________
Schau mir in die Augen, Kleines.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
exit_stage_left
Mini JLI'ler



Anmeldedatum: 06.03.2004
Beiträge: 1

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 12:19    Titel: Antworten mit Zitat

noch ein kleiner Tip.... hat zumindest bei meinem P3 733 / GF256ddr (is nur der Testrechner.... Wink ) fast eine Verdoppelung der FPS gebracht:
(Mapgrösse: 320x320 Tiles; TileSize = 32pixel; Auflösung 1024x768, 7 Ebenen, jede Ebene hat ca. 25.000 Tiles ---> völlig übertrieben, so gross werden meine Maps wohl nie)

Initialisierung:
Code:

m_cD3D = new CDirect3D();
m_cD3D->Init();     ///<Hier wird auch das LPD3DXSPRITE-Objekt angelegt -> das einzige im gesamten Code!

m_cTile = new CTile();
m_cTile->Init(m_cD3D);     ///<Zeiger auf D3D-Klasse übergeben damit die CTile-Klasse auf das Sprite-Objekt zugreifen kann


Code:

m_cD3D->BeginScene();
m_cD3D->BeginSprite();     ///<WICHTIG!

for (int layer=0; layer < 7; layer++)
{
     for (int y=0; y<320; y+=32)
     {
          for (int x=0; x<320; x+=32)
          {
               int tile = TileArray[l*(x+y*320)] ///<...oder so ähnlich... ;)
               m_cTile->Draw(tile,x,y);
          }
     }
}

m_cD3D->EndSprite();     ///<WICHTIG!
m_cD3D->EndScene();



ohne den Aufruf der BeginSprite()/EndSprite()-Methoden würde FÜR JEDES SPRITE erst Begin() und dann End() aufgerufen.... das passiert automatisch beim Rendern des Sprites (wenn man eben diese Methoden nicht selbst aufruft!). ziemlicher Overhead, dazu noch sinnlos. Hatte damit auf o.a. PC gerade mal 20-24fps..... nun sind es wie gesagt knapp doppelt soviel!!! Auf meinem Hauptrechner (p4 2.53, GF4Ti4200) bin ich auf diese Art auch von ca. 80FPS auf knapp 200(!!!) gekommen... NO JOKE!

(die o.a. Schleife wird eigentlich von der CGameMap-Klasse durchlaufen; habs der Einfachheit halber weggelassen! Die DRAW()-Methode der CTile-Klasse ist bei mir auch etwas umfangreicher.... aber zum Erklären reicht es so)

Ich benutze keine STL-Funktionen/Klassen/whatever, aber das ist in dem Fall auch ziemlich egal.

keine Ahnung ob ich Dir helfen konnte, aber die anderen schweifen ja alle vom Thema ab! Wink

NEIN, ich rendere NICHT über den Screen hinaus, auch wenn es oben so aussieht! Mehr als 800-1000 Tiles werde nie gleichzeitig angezeigt! Wie gesagt, ist nur zur Demonstation gedacht, meinen Code hier posten würde wohl den Thread sprengen!

Hoffe Dir helfen zu können.... ich tu mich manchmal etwas schwer mit Erklärungen.... sonst einfach ne PM an mich... oder per ICQ: 127790784.

So long, happy coding! Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 12:36    Titel: Antworten mit Zitat

Fast:

Code:

struct node
{
   DATA ** data; // Was auch immer du teilen willst
   node * parent; // Eltern-Node
   node * children[4];
   bool leaf; // Ist dieser Node ein Endpunkt im Baum?(Blatt)
   node * neighbours[4]; // Die 4 Nachbarn... nicht notwendig aber hilfreich bei Kollisionsabfrage. Ein Nachbar kann dabei entweder größer oder genauso groß sein wie this;
   Quad quad; // Quadrat-Daten(Lage, Größe)
}


So oder so ähnlich sieht so eine Node-Struktur aus, je nach dem, was du noch für Optimierungen/Änderungen du am Quadtree vornimmst. Z.B. gibt es Quadtrees bei denen die Quadrate verschoben sind, um unterteilungen zu sparen.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
xardias
JLI Master


Alter: 39
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 17:29    Titel: Antworten mit Zitat

danke hazel, die kopier ich mir mal fix in den code Wink hatte noch keine zeit für den quad tree Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 19:35    Titel: Antworten mit Zitat

hm, hat der node nicht 3 nachbarn? Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 19:36    Titel: Antworten mit Zitat

Links, rechts, oben, unten. Es sind Quadrate und keine Dreiecke...
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 19:37    Titel: Antworten mit Zitat

aber der knoten braucht doch keinen zeiger auf sich selbst?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Hazel
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 19:38    Titel: Antworten mit Zitat

Häh? Wieso auf sich selbst?

Code:

  *
* x*
  *

_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kampfhund
Super JLI'ler


Alter: 42
Anmeldedatum: 20.07.2002
Beiträge: 408

Medaillen: Keine

BeitragVerfasst am: 25.04.2004, 19:41    Titel: Antworten mit Zitat

achso, ok, dann habe ich das falsch verstanden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3
Seite 3 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum