[D3D] Wie effizient Minimap zeichnen?
-
Jo, Alpha Mask oder manuell Pixelweise prüfen ob das betreffende Element verdeckt ist und dann auslassen.
Auf die Textur zu rendern ist vermutlich das schnellste. Zur not kann man alle Paar Frames ein Teilstück aktualisieren. Haben die bei den ersten C&C Teilen auch so gemacht.
-
Das läuft so ungefähr auf meine bisherige Lösung
Ich habe es jetzt eine ganze Zeit lang so gemact, dass ich mit GDI auf eine Surface zeichne (über mehrere Frames) und bei jedem Frame eine zweite Surface auf den Backbuffer kopiere. Sobald die zu zeichnende Surface fertig ist, werden sie ausgetauscht. Das ist natürlich sehr affig.
hinaus. Statt das GDI zu benutzen meint ihr vermutlich was sinnvolleres. Was ist es? Transformierte Vertexe auf die Textur rendern?
-
Na einfach 4 Vertices mit ner Textur auf den Bildschirm knallen. Ich weiß jetzt nicht so was du da für Probleme hast..
-
Es sind nicht 4, das ist das Problem. Hast du den Thread-eröffnenden Post mal gelesen? Bis jetzt wurde noch nichts gesagt, was ich nicht selber schon geschrieben habe. Ich habe kein Problem insofern, dass ich es nicht auf die Reihe krieg, transformierte Vertexe zu rendern, sondern es wäre beispielsweise interessant zu wissen, ob das überhaupt eine gute Idee ist, schrittweise auf eine Textur zu rendern und die dann auf den Backbuffer. Und vor allem möchte ich wissen, ob es nicht noch eine viel bessere Möglichkeit gibt.
-
Cpp_Junky schrieb:
Auf die Textur zu rendern ist vermutlich das schnellste. Zur not kann man alle Paar Frames ein Teilstück aktualisieren. Haben die bei den ersten C&C Teilen auch so gemacht.
Klar, weil die ersten C&C Teile auch schon soviel Texturen hatten...

Also Fog dynamisch, ändern sich ehh nur'n paar Pixel pro Frame, dafür bleibt die Landschaft schnell und im VRAM drinne.
Bye, TGGC
-
Und wie genau den Fog jetzt? Als Surface auf den Backbuffer kopieren oder als Textur rendern? Wieder mit GDI malen oder locken oder auf die Textur transformierte Vertexe rendern? Oder irgendwas mit AddDirtyRectangle und UpdateTexture versuchen? Was ist denn hier am sinnvollsten?
-
Dynamische Textur.
Bye, TGGC
-
TGGC schrieb:
Cpp_Junky schrieb:
Auf die Textur zu rendern ist vermutlich das schnellste. Zur not kann man alle Paar Frames ein Teilstück aktualisieren. Haben die bei den ersten C&C Teilen auch so gemacht.
Klar, weil die ersten C&C Teile auch schon soviel Texturen hatten...

( ...)Das bezog sich auf die schrittweise Aktualisierung der Mini-Map

-
Danke erstmal an Euch. Die Minimap wird jetzt gezeichnet und wie effizient das ist, muss ich erst noch rausfinden. Auf jeden Fall ist es schon mal nicht schneckenlangsam.
-
Optimizer schrieb:
Danke erstmal an Euch.
np
Bye, TGGC
-
Um den fog of war zu realisieren könntest du es auch mit einem 2D Gitter versuchen, auf das du deine Minimap(die in einer Textur liegt) renderst. Du hast dann zum Beispiel die Möglichkeit die Farbwerte der Gitterpunkte zwischen schwarz und weiß zu färben. Dadurch bleibt Die Map dort dunkel wo man nicht hinsehen kann... Ob das gut aussieht hängt natürlich sehr von der Beschaffenheit des Gitters ab. Natürlich sollte das Gitter nicht zu fein sein. Das Gitter könnte man in einen Vertexbuffer legen, den man bei Farbänderungen neu beschreibt.
Auf Scrolling muß dann natürlich besonderes Augenmerk gelegt werden (da die Farbübergenge weich bleiben sollten.)Eine weitere Möglichkeit Geschwindigkeit herauszuholen (auf einigermaßen modernen Karten) ist folgende: Mit Hilfe des Stencilbuffers kann man es erreichen, dass statische Fenster-Elemente nur gezeichnet werden müssen, wenn sie sich verändern. Sollte deine Minimap also die restliche Grafik überdecken kannst du sie einmal in den Stencilbuffer und auf den Bildschirm rendern. Die restliche Welt wird nun mit Hilfe des Stencil-Tests nur dort gezeichnet, wo deine Minimap nich bereits liegt. Clear_Backbuffer darf dann natürlich nicht eingesetzt werden. (Insgesamt reduziert das overdraw und vermeidet aufwändige Berechnungen)
Soll deine Minimap transparent sein funktioniert das natürlich nicht.mac_bu