- 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();
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();
// 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);
}
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.