Tutorial 6 – 3D-Modelle dynamisch im Hintergrund laden und entladen (Streaming)

Die Darstellung von aufwändig gestalteten Spielewelten macht es erforderlich, dass benötigte 3D-Daten kontinuierlich in den Grafikspeicher geladen und nicht mehr erforderliche Daten aus dem Grafikspeicher entladen (gelöscht) werden (Streaming).
Im aktuellen Programmbeispiel nutzen wir diese Technik beim Rendern eines 3D-Modells. Nach dem Zufallsprinzip werden alle für die Darstellung des Modells erforderlichen Textur- und Meshdaten dynamisch in den Speicher geladen und später wieder entladen. Alle Festplattenzugriffe und sowie die Weiterverarbeitung der geladenen Daten erfolgen im Hintergrund (in einem separaten Thread) zur Vermeidung von Einbrüchen bei der Framerate.


Schritt 1: dynamisches Laden und Entladen eines 3D-Modells vorbereiten

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


Schritt 2: dynamisches Laden beginnen

if(TestModel->ModelInitialized == false)
{
    // Schritt 1 beim dynamischen Laden: Daten von der Festplatte lesen und
    // in den RAM kopieren:
    TestModel->Load_ModelData_Into_RAM_StartThread();

    // Schritt 2 beim dynamischen Laden: Daten aus dem RAM in den
    // Grafikspeicher kopieren:
    TestModel->Init_TextureObjects_And_Buffers();
}


Schritt 3: dynamisches Entladen beginnen (Modell aus dem Speicher löschen)

// Model dynamisch entladen (belegten Speicher wieder freigeben):
if(TestModel->ModelInitialized == true)
{
    TestModel->Unload_Model();
}




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.