Tutorial 7 – Texture Effects; Texture Coordinate Animation

Der Einsatz von Textur-Effekten und Texturkoordinaten-Animationen ist in vielen Spielen unverzichtbar. Betrachten wir zwei praxisbezogene Beispiele:









 

  • Darstellung von fahrenden Panzerfahrzeugen: Die Bewegung der Antriebsketten wird in der Regel mithilfe von Texturkoordinaten-Animationen simuliert (durch die Änderung der Texturkoordinaten wirkt es, als ob sich die Ketten bewegen)
  • Schadensmodelle: Bei der Darstellung von beschädigten Modellteilen lassen sich je nach Grad der Zerstörung spezielle Schadenstexturen verwenden. Weitere Beschädigungen wie Einschuss- und Explosions-Löcher lassen sich ferner durch eine Modifikation der Textur-Alpha- und -Farbwerte realisieren.


unterstützte Effekte (siehe Skripdatei TextureEffects.txt):

  • Wechselnde Leuchtkraft bei der Verwendung von Light Maps (bsp. Flacker-Effekt)
  • Austausch der Surface, Normal, Specular und Light Maps (wichtig bei der Darstellung von Schadensmodellen)
  • Verwendung zusätzlicher Light und Layer Maps
  • Modifikation von Alpha- und Farbwerten bei der Surface und Specular Map mithilfe zusätzlicher Texturen. Hierdurch lassen sich beispielsweise Einschuss- und Explosions-Löcher simulieren
  • Textur-Animationen (automatischer Texturwechsel)
  • Texturkoordinaten-Animation (automatische Änderung der Texturkoordinaten).


Schritt 1: 3D-Modell laden (dynamisch im Hintergrund)

TestModel = new CModel;
TestModel-
>Prepare_Initialisation("../Models/Destroyer_Fed", 5, true);

TestModel->Init_TextureEffectAndAnimationList(
                 "../Models/Destroyer_Fed/TextureEffects.txt",
                 "../Models/Destroyer_Fed/Textures/");


TestModel->Load_ModelData_Into_RAM_StartThread();


Schritt 2: Modell-Instanz laden

// Jede Modell-Instanz repräsentiert ein 3D-Objekt in der Spielewelt.
// Bevor ein 3D-Objekt gerendert werden kann, muss man der Modell-Instanz
// ein 3D-Modell zuordnen.
TestModelInstance = new CModelInstance;
TestModelInstance->Init_ModelInstance(TestModel);
TestModelInstance->Init_TextureEffectAndAnimationController();





Schritt 3: die zu verwendenden Textur-Effekte einstellen

// Textureffekte auf alle Teile (Modelparts) des 3D-Modells anwenden:
for(long i = 0; i < TestModel->NumModelParts; i++)
{
//TestModelInstance->TextureEffectAndAnimationController->
                     UsePrimaryLightTexture[i] = false;

TestModelInstance->TextureEffectAndAnimationController->
                   Set_PrimaryLightTextureRandomIntensity(i, 0.1f, 1.0);

// Ersetzen der Standardtexturen durch Schadenstexturen:
TestModelInstance->TextureEffectAndAnimationController->
                   Use_SurfaceTextureSubstitution(i, 0, 0);

TestModelInstance->TextureEffectAndAnimationController->
                   Use_NormalTextureSubstitution(i, 0,  0);

TestModelInstance->TextureEffectAndAnimationController->
                   Use_SpecularTextureSubstitution(i, 0,  0);

TestModelInstance->TextureEffectAndAnimationController->
                   Use_LightTextureSubstitution(i, 1,  0);

// eine zusätzliche Light Map verwenden:
TestModelInstance->TextureEffectAndAnimationController->
                   Use_AdditionalLightTextures(i, 0,  0);

// eine zusätzliche Textur-Schicht verwenden (im aktuell verwendeten Shader
// wird die Layer-Textur
mit der Additional-Light-Textur kombiniert):
TestModelInstance->TextureEffectAndAnimationController->
                   Use_AdditionalLayerTextures(i, 0,  0);

// Die Textur-Modifikationen ermöglichen die Darstellung der
// Einschusslöcherim Schiffsrumpf:

TestModelInstance->TextureEffectAndAnimationController->
                   Use_SurfaceTextureModification(i, 0,  0);

TestModelInstance->TextureEffectAndAnimationController->
                   Use_SpecularTextureModification(i, 0,  0);

TestModelInstance->TextureEffectAndAnimationController->
                   Update_TextureEffectAnimations(i);

// mögliche Texturkoordinaten-Animation:
//TestModelInstance->TextureEffectController->
                     Animate_TextureCoordinates(i, 0.01f, 0.01f);

//TestModelInstance->TextureEffectController->
                     Update_TextureCoordinateAnimation(i, 1, g_FrameTime);
}



Hinweise zum Erstellen eines neuen Projekts:

  • Kopieren Sie den Ordner GraphicsAndPhysicsFrameworkImports ins Projektverzeichnis
  • Kopieren sie alle dll-Dateien sowie die Konfigurationsdatei ResolutionAndRendering.txt aus besagtem Ordner ins gleiche Verzeichnis, in dem sich auch die exe-Datei befindet (in unseren Programmbeispielen ist dies das Bin-Verzeichnis)
  • Binden Sie die folgenden Dateien in Ihr Projekt ein: GraphicsAndPhysics_Framework_Imports.h, GraphicsAndPhysics_Framework_Imports.lib, glew32.lib, glew32s.lib, glut32.lib. Die Glew- und Glut-Bibliotheken ermöglichen die Nutzung der aktuellen OpenGL-Spezifikationen unabhängig vom Framework.