Bücher online kostenlos Kostenlos Online Lesen
Erfolgreiche Spieleentwicklung

Erfolgreiche Spieleentwicklung

Titel: Erfolgreiche Spieleentwicklung Kostenlos Bücher Online Lesen
Autoren: Alexander Rudolph
Vom Netzwerk:
Ressource wird der Zählerstand um den Wert 1 dekrementiert. Wird eine Ressource schließlich nicht mehr verwendet, dann steht der Referenzzähler wieder bei 0 , und die Ressource kann zerstört werden.
    Anhand des Ressourcennamens lässt sich überprüfen, ob eine Ressource bereits geladen wurde. Ein Vergleich des Namens einer neu zu initialisierenden Ressource mit den Namen von bereits zuvor initialisierten Ressourcen ist jedoch nicht besonders performant. Als schnellere Alternative bietet sich der Einsatz von eindeutigen ID-Nummern ( ResourceID ) an, die man jeder Textur bzw. jedem Mesh zuvor zuordnen muss. Vor dem Anlegen einer neuen Ressource wird dann lediglich überprüft, ob bereits zuvor eine Ressource mit identischer ID geladen wurde.
    Verschaffen wir uns zunächst anhand von Listing 2.1 eine Übersicht über die vom Framework bereitgestellten Funktionen für die Texturverwaltung.
    void Init_TextureManager(long numTexturesMax);
void Delete_TextureManager(void);
// Durch Vergleich der ResourceID mit bereits verwendeten
// ResourceIDs(jedem Textur muss vorab eine eindeutige
// ResourceID zugeordnet worden sein) wird in den
// nachfolgenden Funktionen das mehrfache Laden der
// Ressource verhindert:
CTexture* Load_Texture(long ResourceID, char* pTextureName, BOOL MipMapping);
[...]
// Liefert eine leere Ressource zurück, die zu einem späteren
// Zeitpunkt im Hintergrund initialisiert und wieder entladen
// werden kann:
CTexture* Prepare_Loading_Texture(long ResourceID, char* pTextureName, BOOL MipMapping);
[...]
// Durch Vergleich des neuen Texturnamens mit bereits
// verwendeten Texturnamen wird in den nachfolgenden
// Funktionen das mehrfache Laden der Ressource verhindert:
CTexture* Load_Texture_And_Get_ResourceID(long* pResourceID, char* pTextureName, BOOL MipMapping);
[...]

// Liefert eine leere Ressource zurück, die zu einem
// späteren Zeitpunkt im Hintergrund geladen und wieder entladen werden kann:
CTexture* Prepare_Loading_Texture_And_Get_ResourceID
(long* pResourceID, char* pTextureName, BOOL MipMapping);
[...]

// Freigabe einer nicht mehr verwendeten Textur-Ressource:
void Release_Texture(CTexture** ppTexture, long ResourceID);
void Release_Texture(CTexture** ppTexture);

// Textur aus dem Grafikspeicher entfernen, sofern diese
// zurzeit nicht benötigt wird. Die Ressource selbst wird
// jedoch nicht freigegeben und kann dementsprechend zu
// einem späteren Zeitpunkt wieder geladen werden:
void Unload_Texture(CTexture* pTexture, long ResourceID);
void Unload_Texture(CTexture* pTexture);
    Listing 2.1: Funktionen für die Texturverwaltung
    Die im Framework bereitgestellten Funktionen für die Mesh-Verwaltung arbeiten nach dem gleichen Prinzip. Auf eine explizite Vorstellung im Rahmen dieses shortcuts wird daher verzichtet.

2.3 Post Processing
    Post Processing (zu Deutsch: nachträgliche Bildbearbeitung) ist ein so umfangreiches Thema, dass man ohne Probleme ein komplettes Buch darüber schreiben könnte. Heutzutage beschränkt sich der Einsatz bei Weitem nicht nur auf die Umsetzung zusätzlicher grafischer Effekte (Bloom, Tiefenunschärfe, etc.); es ist mittlerweile schlicht und einfach unverzichtbar bei der Durchführung von Beleuchtungsberechnungen sowie der Szenenkomposition. Im Gegensatz zur klassischen Szenendarstellung werden zur Realisierung der gewünschten Post-Processing-Effekte zunächst die unterschiedlichen Informationen einer 3-D-Szene (Farbwerte der unbeleuchteten Szenenpixel, zugehörige Normalenvektoren, Tiefenwerte, etc.) in diversen Render Targets (Texturen) zwischengespeichert. Als Ergebnis der Post-Processing-Berechnungen erhält man schließlich die korrekt beleuchteten Szenenpixel, die in einem zweiten Schritt auf ein bildschirmfüllendes Vertex-Quad (Screen-Quad) gemappt werden.
    Bei der Komposition einer 3-D-Szene sind mitunter mehrere Renderdurchgänge notwendig. Betrachten wir als Beispiel die Darstellung von Partikeleffekten (transparenten Szenenobjekten).
Renderdurchgang 1: Darstellung der 3-D-Szene ohne Partikel; Speichern der Tiefenwerte in einem zusätzlichen Render Target
Renderdurchgang 2: Darstellung der Partikel bei eingeschaltetem Blending. Anhand der im Renderdurchgang 1 gespeicherten Tiefenwerte lässt sich ermitteln, ob ein Partikelpixel sichtbar ist oder aber durch die Szenengeometrie verdeckt wird.
    Gebunden werden die einzelnen Render Targets an ein sogenanntes Frame-Buffer-Objekt. Zusätzlich zum Frame Buffer müssen wir darüber hinaus ein

Weitere Kostenlose Bücher