Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 31.08.2003, 17:45 Titel: 2D-Grafik-Optimierung |
|
|
Ich habe festgestellt, dass bei der Geschwindigkeit ausschließlichvon der Anzahl der Sprites zählt, anstatt der Pixelmenge, die man auf dem Bildschirm ausgibt. So sieht es zumindest bei Direct X 9 aus. Was mach ich denn, wenn z.B. ein Spiel programmiere, worin 100 Einheiten auf dem Radatr sichtbar sein sollen, und die Raumschiff mit unmengen an Lasern schießen?? Die Pixelmenge ist gar nicht so groß. aber die Anzahl der sprites steigt locker über 1000. Ich habe eine Geforce FX 5600 und einen Athlon 1800+. Selbst dieser Rechner stößt dabei schnell an die Grenzen.
Gibt es da spezielle Techniken, wie man viele Sprites unterbringen kann? |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 31.08.2003, 17:50 Titel: |
|
|
Du könntest alles Sprites, die die gleiche Textur benutzen aufeinmal rendern lassen(über Indexbuffer). Desweiteren kannst du viele kleine Spritetexturen in eine große Textur packen. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 31.08.2003, 18:12 Titel: 2D-Grafik-Optimierung |
|
|
Das mit dem "aufeinmal rendern" kam mir auch in den sinn. Wie soll das aber praktisch aussehen? Die Laserschüsse haben alle völlig variable positionen und Richtungen. Außerdem benutze ich die Funktion "Draw" zum zeichnen und keine Quads aus dem 3Dbereich.
Kleiner Ausschnitt aus dem Programmcode:
Sprite->m_lpSprite->Draw(Sprite->m_lpTexture,
&SpriteRect,
&Sprite->m_vScale,
&Sprite->m_vRotationCenter,
Sprite->m_Rotation,
&Sprite->m_vPosition,
0xFFFFFFFF);
Das ist die vereinfachte Funktion nur für 2D-sprites, die es seit Direct X 9 gibt. Wenn du diese nicht kennst, kannst mir zumindest mal zeigen wie du dir das mit dem Indexbuffer vorstellst. Viele kleine Texturen in ein große reinpacken ist ne nette idee, aber nicht umsetzbar, weil eben die positionen und orientierung beliebig sind. |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 05.09.2003, 21:26 Titel: |
|
|
Ok es hängt schon mit der PixelMenge zusammen, doch ist relativ gering zu dem Locken und Unlocken der Surfaces. Deshalb kann ich dir nur raten die Schüsse als normale Striche darzustellen und das indem du die Laserschüsse manuell malst. Bei dieser Variante lockst du nur einmal den Backbuffer zeichnest alle Laserschüsse und bist fertig!
Wenn du willst kann ich dir das noch als Source-Code zeigen. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 06.09.2003, 11:46 Titel: |
|
|
Kann man nicht über Quads irgendwie mehrere Sprites an einem Stück zeichen, ohne für jedes Sprite die Oberfläche sperren zu müssen? Wäre nicht schlecht, wenn du dein Tutorial freigeben könntest. |
|
Nach oben |
|
|
|