Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Zyrian Super JLI'ler

Anmeldedatum: 30.08.2003 Beiträge: 321 Wohnort: Essen Medaillen: Keine
|
Verfasst am: 25.04.2004, 12:19 Titel: |
|
|
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 |
|
 |
exit_stage_left Mini JLI'ler
Anmeldedatum: 06.03.2004 Beiträge: 1
Medaillen: Keine
|
Verfasst am: 25.04.2004, 12:19 Titel: |
|
|
noch ein kleiner Tip.... hat zumindest bei meinem P3 733 / GF256ddr (is nur der Testrechner.... ) 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!
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!  |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 25.04.2004, 12:36 Titel: |
|
|
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 |
|
 |
xardias JLI Master

Alter: 39 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 25.04.2004, 17:29 Titel: |
|
|
danke hazel, die kopier ich mir mal fix in den code hatte noch keine zeit für den quad tree  |
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 25.04.2004, 19:35 Titel: |
|
|
hm, hat der node nicht 3 nachbarn?  |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 25.04.2004, 19:36 Titel: |
|
|
Links, rechts, oben, unten. Es sind Quadrate und keine Dreiecke... _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 25.04.2004, 19:37 Titel: |
|
|
aber der knoten braucht doch keinen zeiger auf sich selbst? |
|
Nach oben |
|
 |
Hazel JLI MVP


Alter: 40 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 25.04.2004, 19:38 Titel: |
|
|
Häh? Wieso auf sich selbst?
_________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
 |
Kampfhund Super JLI'ler
Alter: 42 Anmeldedatum: 20.07.2002 Beiträge: 408
Medaillen: Keine
|
Verfasst am: 25.04.2004, 19:41 Titel: |
|
|
achso, ok, dann habe ich das falsch verstanden. |
|
Nach oben |
|
 |
|