Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

3D-Grafik mit der TriBase-Engine Dozent: Prof. M. Thaller Referentin: Roza Bisingalieva.

Ähnliche Präsentationen


Präsentation zum Thema: "3D-Grafik mit der TriBase-Engine Dozent: Prof. M. Thaller Referentin: Roza Bisingalieva."—  Präsentation transkript:

1 3D-Grafik mit der TriBase-Engine Dozent: Prof. M. Thaller Referentin: Roza Bisingalieva

2 Direct3D mit der TriBase-Engine Die Einführung einer Klasse für 3D-Grafik in der TriBase-Engine – Erleichterung der Arbeit mit Direct3D: ● Automatische Initialisierung von Direct3D ● Statusänderungen minimieren ● Texturverwaltung ● Vertex- und Index-Buffer einfacher erstellen ● D3DX-Effekte leichter verwalten

3 Direct3D mit der TriBase-Engine tbDirect3D ist eine Singleton-Klasse => eine einzige Instanz static tbDirect3D& Instance() {static tbDirect3D Inst; return Inst;} Ablaufplan: ● Durch die Funktion tbDoConfigDialog – Informationen über die Direct3D- Einstellungen. ● Direct3D-Initialisierung – durch Init-Methode ● tbDirect3D-Klasse bereit zur Darstellung von 3D-Grafik ● die Exit-Methode zum Herunterfahren

4 Direct3D mit der TriBase-Engine Überladen des -> Operators Zum Zeichnen muss man auf die Idirec3DDevice9-Schnittstelle zugreifen : tbDirect3D& D3D = tbDirect3D::Instance(); D3D.GetDevice() - > DrawPrimitive(...); Nachteil: jede einzelne Methode von Idirect3DDevice9 wird in der tbDirect3D-Klasse gekapselt. Lösung: „- >“ -Operator der tbDirect3D-Klasse zu überladen => Er liefert dann den Zeiger auf die Idirec3DDevice9: PDIRECT3DDEVICE9 operator -> () {return m_pD3DDevice;} tbDirect3D& D3D = tbDirect3D::Instance(); D3D->DrawPrimitive(...); // zum direkten Aufruf von Methoden von Idirect3DDevice

5 Direct3D mit der TriBase-Engine der Texturmanager Die Hauptaufgabe – die Verwaltung von Texturen: das doppelte Laden von Texturen und somit Grafikspeicherverschwendung vorzubeugen Die Listeneintragsstuktur: Für die Texturen – eine Liste; Listeneinträge werden in der Struktur tbTextureListEntry gespeichert. Ablauf: ● Initialisierung des Texturmanagers über die Methode-Init der Texturmanagerklasse. Als Parameter – die Startgröße der internen Texturliste. Die Methode-Init ruft die Methode SetListSize ( Erstellung und Erweiterung der Texturliste) auf. ● Die Methode GetTexture – Suche nach einer Textur-Datei, arbeitet mit echten Dateien ● LoadTexture lädt die angegebene Textur direkt, ohne sie in der Liste zu suchen. ● ReleaseTexture: Paremeter – die zu löschende Textur, ein Schnittstellenzeiger. ● Die Exit-Methode löscht alle geladenen Texturen und die interne Texturliste mit DeleteAllTextures.

6 Direct3D mit der TriBase-Engine Vertex- und Index-Buffer Der Zweck von Vertex- und Index-Buffern – große Mengen an Daten schnell für die Grafikkarte verfügbar zu machen. Aufgaben für die beiden Klassen – Puffer erstellen und das Befüllen mit Daten vereinfachen. Beim Erstellen und beim Sperren folgendes zu beachten: ● Verwendungszweck:0 – Standard; D3DUSAGE-DYNAMIC – ein dynamischer Puffer; D3DUSAGE_WRITEONLY – Anwendung hat keinen Lesezugriff auf die Daten aus diesem Puffer. ● Speicherklasse: D3DPOOL_DEFAULT, D3DPOOL_MANAGED, D3DPOOL_SYSTEMMEM und D3DPOOL_SCRATCH ● Sperrmethode.

7 Direct3D mit der TriBase-Engine Vertex- und Index-Buffer Ablauf: ● Aufruf des Konstruktors der Klasse tbVertexBuffer durch new ● Initialisierung des Vertex-Buffers durch die Init-Methode ● Mehrfaches Aufrufen von SetVertex – die Klasse merkt sich den 1. und den letzten veränderten Vertex. ● Methode Update => der gesamte Speicherbereich wird gesperrt ● Vertex-Buffer zum Rendern bereit. ● Die Exit-Methode wird automatisch vom Destruktor der Klasse aufgerufen => die Freigabe des Vertex-Buffers und der internen Kopie.

8 Direct3D mit der TriBase-Engine Effektklasse Effektklasse – tbEffect: Das Laden der Effekte aus echten, virtuellen Dateien, aus dem Speicher oder aus einer Ressource.

9 Modelldateien Zweck: Ein Modelldateiformat für die TriBase-Engine entwerfen, dafür eine Modellklasse schreiben. Eine Modelldatei enthält: ● Informationen über Vertizes mit frei definierbarem Vertexformat ● Indizes, um Verschwendung vom Speicher zu vermeiden. ● Materialinformationen in Form von D3DX-Effekten: Materialeinstellungen, Texturen ● Optional – Animationsdaten, Beleuchtung Ein Modelldateiformat enthält keine spielspezifischen Informationen.

10 Modelldateien Flexible Dateien bestehen aus Chunks ( in beliebiger Reihenfolge)

11 Modelldateien flexible Dateien Der Chunk-Header – Inhalt wird durch eine Struktur bestimmt: struct tbChunkHeader { tbChunkTypeChunkType;// Typ des Chunks ; Aufzählung DWORDdwDataSize;// Größe der Daten des Chunks }; tbChunkType ist eine Aufzählung für verschiedene Chunk-Typen

12 Modelldateien Chunk-Typen Der Vertexdaten-Chunk beinhaltet die Vertizes des gesamten Modells: Bezeichner – TB_CT_MODEL_VERTICES struct TRIBASE_API tbModelVerticesChunkHeader { DWORDdwFVF;// Vertexformat DWORDdwVertexSize;// Größe eines einzelnen Vertex DWORDdwNumVertices;// Anzahl der Vertizes floatfBoundingSphereRadius;// Radius der umgebenden Kugel tbVector3vBoundingBoxMin;// Minimumpunkt des umgebenden Quaders tbVector3vBoundingBoxMax;// Maximumpunkt des umgebenden Quaders };

13 Modelldateien Chunk-Typen Der Indexdaten-Chunk: struct tbModelIndicesChunkHeader { D3DFORMATIndexFormat;// Das Format der Indizes D3DFMT_INDEX16 oder D3DFMT_INDEX32 DWORDdwIndexSize;// Größe eines einzelnen Index DWORDdwNumIndices;// Anzahl der Indizes };

14 Modelldateien Chunk-Typen Der Effekt-Chunk beinhaltet alle D3DX-Effekte des gesamten Modell – Materialeigenschaften, notwendige Render-States, Texturangaben. struct TRIBASE_API tbModelEffectHeader {//Für jeden Effekt: characName[256];// Name des Effekts BOOLbAlphaBlended;// Mit Alpha-Blending rendern? D3DPRIMITIVETYPEPrimitiveType;// Typ der Primitiven DWORDdwStartIndex;// Wo mit dem Rendern anfangen? DWORDdwNumPrimitives;// Wie viele Primitiven rendern? DWORDdwMinIndex;// Kleinster verwendeter Index DWORDdwNumVertices;// Größter Index - Kleinster Index + 1 DWORDdwEffectCodeSize;// Größe des Effektquellcodes };

15 Modelldateien Chunk-Typen Der Beleuchtungschunk, um ein Modell direkt mit lokalen Lichtquellen zu versehen. Effekte fordern Texturen: ● Texturen werden in den TEXTURE-Variablen gespeichert ● DWORD-Variablen wie Texture1Type.. bestimmen den Typ jeder Textur ● NumTextures – die Anzahl der verwendeten Texturen ● Zusätzlich: für jede Textur – ein Color-Key

16 Modelldateien Der Konverter Erstellung einer Datei im neuen Format: dazu - > das TriBase-Tool Model Converter: 3DS-Dateien werden in TBM-Dateien konvertiert. Der Konverter befindet im Ordner:... TOOl\Src\ModelConverter und die ausführbare Datei im Unterverzeichnis...\Tools\Bin\ModelConverter

17 Modelldateien Eine Modellklasse Ablauf: 1. tbModel-Klasseninstanz 2. Die Init-Methode öffnet die Modelldatei und liest sie Chunk für Chunk 3. Texturen werden geladen und in die Effektvariablen kopiert. 4. Zum Zeichnen des Modells – Render-Methode (Start- und Endeffekt) 5. tbModel-Destruktor → eine interne Struktur für einen Effekt

18 Modelldateien Die Klassendefinition 1. Variablen 2. Methoden: Einige Init-Methoden – Laden des Modells aus einer virtuellen, echten Datei, aus dem Speicher oder einer Ressource. Aufgabe – Laden und Auswerten aller bekannten Chunks ( Erstellen und Füllen des Vertex- bzw. Index-Buffers) : Laden der Vertizes: ● Vertexdaten werden in die Member-Varialen von tbModel kopiert. ● Initialisieren des Vertex-Buffers der Modellklasse ● Einlesen der Vertizes aus der Datei in den Speicherbereich des Vertex-Buffers ● Schreiben der eingelesenen Vertizes in den Puffer

19 Modelldateien Die Klassendefinition Laden der Indizes ähnlich wie das Laden der Vertizes Laden der Effekte: ● Das Lesen der Anzahl der Effekte ● Das Initialisieren der internen Effekteliste ● for-Schleife ruft LoadEffectTextures auf, um die vom Effekt aufgeforderten Texturen zu laden

20 Modelldateien Die Klassendefinition Rendern des Modells – Render-Methode erstellt die Modelldatei und lädt sie in der Engine Die Exit-Methode löscht: ● Vertex- und Index-Bufer ● Alle Effekte ● Freigeben von geladenen Texturen mit tbTextureManager::ReleaseTexture

21 Modelldateien das Beispielprogramm Dateien: ● City.tbm enthält das Modell der Stadt. Alle verwendete Texturen in der City.zip ● Alle Dateien für das Raumschiffmodell sind im Ship.zip ● Eine würfelförmige Textur - im SkyBox.zip

22 Texte zeichnen Um einen Text anzuzeigen → Speicherung der Zeichen: Bitmaps-Fonts: ● die Start- und die Endkoordinaten jedes Zeichens werden gespeichert ● Zeichnen mit Hilfe eines einzigen Vierecks Das Format der Textur: ● Platz für Farbangaben ● für jeden Pixel noch eine Transparenzangabe (Alphakanal)

23 Texte zeichnen Transformierte Vertizes für Texte: Grund – Texte werden im dreidimensionalen Raum zweidimensional gezeichnet struct TRIBASE_API tbFontVertex { tbVector3vPosition;// Positionsangabe floatfRHW;// 1/w D3DCOLORDiffuse;// Streufarbe tbVector2vTexture;// Texturkoordinaten static DWORDdwFVF;// Vertexformat }; TriBase-Tool CreateBitmapFont erzeugt eine TGA-Datei (enthält RGB-Daten und einen Alphakanal) und eine TBF-Datei (genauere Angaben zu jedem einzelnen Zeichen gespeichert)

24 Texte zeichnen Inhalt der TBF-Datei struct TRIBASE_API tbFontInfo { floatfWidth;// Breite der Schriftart floatfHeight;// Höhe der Schriftart floatfTextureWidth;// Breite der Textur floatfTextureHeight;// Höhe der Textur tbVector2avTopLeft[256];// Linke obere Koordinate jedes Zeichens tbVector2avBottomRight[256];// Rechte untere Koordinate jedes Zeichens floatafCharWidth[256];// Breite jedes Zeichens in Pixeln };

25 Texte zeichnen tbFont – eine Schriftklasse - sorgt für das Laden einer TGA- und einer TBF-Datei und das Anzeigen eines Texts Ablauf: 1. Erstellung einer neuen Instanz der tbFont-Klasse 2. Init-Methode initialisiert eine Schriftart 3. DrawText-Methode rendert beliebig viel Text 4. End-Methode deaktiviert den internen Effekt. Der vorherige Zustand wird wiederhergestellt 5. Exit gibt alles frei.


Herunterladen ppt "3D-Grafik mit der TriBase-Engine Dozent: Prof. M. Thaller Referentin: Roza Bisingalieva."

Ähnliche Präsentationen


Google-Anzeigen