Nicht minder interessant als die Erzeugung ist die Darstellung der einzelnen Sterne und 3D-Nebelobjekte, denn es müssen mehrere tausend Objekte mit möglichst großer Performance gerendert werden. Möglich ist dies nur mithilfe von Geometry Instancing in Kombination mit Texture-Buffer-Objekten zum Speichern der für das Rendering benötigen Daten (Position, Skalierung, Textur-ID, etc.). Zur Vermeidung von Texturwechseln kommen anstelle einzelner Texturen zudem Texture-Array-Objekte zum Einsatz.
Rendering:
Galaxy->Render_Galaxy(PostProcessingEffects->
SceneCameraSpacePosAndDepthTexture);
NebulaSystem->Render_NebulaObjects(&g_CameraPosition,
&g_CameraViewDirection, &g_ViewProjectionMatrix,
PostProcessingEffects->SceneCameraSpacePosAndDepthTexture);
LensFlares->Update_ViewDirection(&g_matView);
LensFlares->Prepare_Rendering_LensFlares_MultipleLightSources(
PostProcessingEffects->SceneCameraSpacePosAndDepthTexture);
long SunID;
for(i = 0; i < Galaxy->NumOfSunsInsideLocalGroup; i++)
{
SunID = Galaxy->SunTextureID[Galaxy->IDOfSunsNearTheCamera[i]];
LensFlares->Render_LensFlares_MultipleLightSources(
&g_ViewProjectionMatrix, &g_LensFlareColor[SunID],
&Galaxy->CameraSpacePosition[Galaxy->IDOfSunsNearTheCamera[i]],
g_LensFlareCameraDistanceValue, g_LightScaleFactorX[SunID],
g_LightScaleFactorY[SunID], g_LensFlareScaleFactor[SunID],
g_LensFlareIntensityDecrease);
}
LensFlares->Stop_Rendering_LensFlares_MultipleLightSources();
SceneCameraSpacePosAndDepthTexture);
NebulaSystem->Render_NebulaObjects(&g_CameraPosition,
&g_CameraViewDirection, &g_ViewProjectionMatrix,
PostProcessingEffects->SceneCameraSpacePosAndDepthTexture);
LensFlares->Update_ViewDirection(&g_matView);
LensFlares->Prepare_Rendering_LensFlares_MultipleLightSources(
PostProcessingEffects->SceneCameraSpacePosAndDepthTexture);
long SunID;
for(i = 0; i < Galaxy->NumOfSunsInsideLocalGroup; i++)
{
SunID = Galaxy->SunTextureID[Galaxy->IDOfSunsNearTheCamera[i]];
LensFlares->Render_LensFlares_MultipleLightSources(
&g_ViewProjectionMatrix, &g_LensFlareColor[SunID],
&Galaxy->CameraSpacePosition[Galaxy->IDOfSunsNearTheCamera[i]],
g_LensFlareCameraDistanceValue, g_LightScaleFactorX[SunID],
g_LightScaleFactorY[SunID], g_LensFlareScaleFactor[SunID],
g_LensFlareIntensityDecrease);
}
LensFlares->Stop_Rendering_LensFlares_MultipleLightSources();
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.
GraphicsAndPhysicsFrameworkDemo20.zip