Tutorial 32 – Raster-Based 3D-Modeling

Im heutigen Tutorial präsentieren wir eine Methode, mit deren Hilfe man 3D-Modelle schnell und einfach aus vorgefertigten Modellteilen zusammensetzen kann. Die Definition dieser Modelle erfolgt mittels sogenannter ModelDescription-Dateien (zu finden im RasterBasedModels-Ordner), die sich parallel zum laufenden Modelviewer-Programm jederzeit modifizieren und neu einlesen lassen:






#Definition von sogenannten Platzhaltern:
Positionen, an denen sich später (in einem Spiel)
Antriebssysteme, Positionslichter und Waffensysteme
platzieren lassen#

#Num Engines:# 1
0.0, 0.0, -7.0

#Num Lights:# 3
0.0, 0.5, 5.5
1.5, 0.0, -5.0
-1.5, 0.0, -5.0

#Num Weaponsystems:# 0

#Num Model Part (Mesh) Definitions:# 11

#1# ../ModelParts/Meshes/BaseBox.txt
#2# ../ModelParts/Meshes/LowerEdge1PosZ.txt
#3# ../ModelParts/Meshes/PyramidTrunk1_50_PosZ.txt
#4# ../ModelParts/Meshes/LateralCenteredDoubleEdge1_25_PosX.txt
#5# ../ModelParts/Meshes/LateralCenteredDoubleEdge1_25_NegX.txt
#6# ../ModelParts/Meshes/LateralCenteredDoubleEdge1_25_PosY.txt
#7# ../ModelParts/Meshes/LateralCenteredDoubleEdge1_25_NegY.txt
#8# ../ModelParts/Meshes/PyramidTrunk1_50_PosX.txt
#9# ../ModelParts/Meshes/PyramidTrunk1_50_NegX.txt
#10# ../ModelParts/Meshes/PyramidTrunk1_50_PosY.txt
#11# ../ModelParts/Meshes/PyramidTrunk1_50_NegY.txt

#Num Texture Sets:# 3

#Hinweise: Die verwendeten Texturen sind in der Datei TextureDesc.txt
angegeben!
Bei von der Würfelform abgeleiteten Modellteilen lassen sich alle 6 Seiten
individuell texturieren.#

#(-y) (+y) (-z) (+z) (-x) (+x)#

#1# 0, 0, 0, 0, 0, 0
#2# 0, 0, 5, 0, 0, 0
#3# 0, 1, 0, 0, 0, 0

#3D-Raster definieren und die einzelnen Modellteile an der
gewünschten Stelle positionieren:#

#Model Height (y-direction):# 5   #Hinweis: y = 2, 1, 0, -1, -2#

#Model Length (z-direction):# 14

#Model Width (x-direction):# 5

#Hinweise:
00 00 beschreibt ein leeres Rasterfeld
Der erste Index entspricht der MeshID, der zweite Index der TexursetID#

#y = 2:#

00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 01 01, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 01 01, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 01 01, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 01 01, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00
00 00, 00 00, 00 00, 00 00, 00 00

[...]

#y = 0:#

00 00, 00 00, 02 03, 00 00, 00 00
00 00, 00 00, 01 01, 00 00, 00 00
01 01, 09 01, 01 01, 08 01, 01 01
00 00, 00 00, 01 01, 00 00, 00 00
01 01, 09 01, 01 01, 08 01, 01 01
00 00, 00 00, 01 01, 00 00, 00 00
01 01, 09 01, 01 01, 08 01, 01 01
00 00, 00 00, 01 01, 00 00, 00 00
01 01, 09 01, 01 01, 08 01, 01 01
00 00, 00 00, 01 01, 00 00, 00 00
00 00, 00 00, 01 01, 00 00, 00 00
00 00, 05 01, 01 01, 04 01, 00 00
00 00, 05 01, 01 01, 04 01, 00 00
00 00, 00 00, 03 02, 00 00, 00 00

[...]


Obwohl sich die einzelnen Modellteile mithilfe von Texture-Buffer-basiertem Geometry Instancing schnell und effizient darstellen lassen (die in diesem Zusammenhang verwendeten Shader-Programme RasterBasedRendering.vert sowie RasterBasedRendering.frag befinden sich im Ordner Shader), wird ein 3D-Raster-Modell (diese Bezeichnung rührt daher, dass die einzelnen Modellteile auf einem dreidimensionalen Raster angeordnet sind) beim Einlesen der zugehörigen Description-Datei – für eine mögliche spätere Verwendung in einem anderen Programm – automatisch in ein Framework-Standardformat konvertiert. Alle in diesem Zusammenhang benötigten Informationen – welches 3D-Model bei Programmstart geladen wird und welche Parameter bei der Konvertierung berücksichtigt werden sollen – sind in der Datei DemoConfig.txt gespeichert:

[...]
ActualUsedModelDescFile: ../RasterBasedModels/BattleCruiser3.txt
ConvertedModelName: BattleCruiser3
ConvertedModel_GenerateNormalsPerTriangle(no=0,yes=1): 1
ConvertedModel_MeshReconstruction(no=0,yes=1): 1

ModelScaleFactor: 1.0

RenderConvertedModel(no=0,yes=1): 1


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.

GraphicsAndPhysicsFrameworkDemo32.zip