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

Slides:



Advertisements
Ähnliche Präsentationen
Indirekte Adressierung
Advertisements

FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Objekte werden als Adressen (Referenzen) übergeben. Dies führt manchmal zu unerwarteten Ergebnissen...
Polymorphie (Vielgestaltigkeit)
Simulation und 3D-Programmierung Praxis: Dreiecke, Texturen, Vertex-Buffer Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung.
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
3D-Grafik mit der TriBase-Engine
Modularisierungstechniken
Einführung in die Programmierung mit Java
Programmieren mit JAVA
DVG Klassen und Objekte
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
6 Mit dem Internet Explorer im WWW arbeiten
Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. Manfred Thaller AM 3 Übung: Softwaretechnologie.
3D- Spieleprogrammierung
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmiersprache C 4
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Key-Value Paare (KVP) - Metadaten für Kanäle speichern und nach MDF4 exportieren PM (V1.0)
C++ FÜR cOMPUTERSPIELENTWICKLER
9. Frames1 Was ist ein Frame? l Frames teilen Browser-Fenster in rechteckige Bereiche. l Mehrere Web-Seiten können l gleichzeitig angezeigt werden l unabhängig.
Ein Spiel mit der SDL – Teil 2. Ein Spiel mit der SDL TSingleton CTimerCFramework CGame CPlayer CShot CAsteroids CSprite.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Operator Overloading, Mehrfachvererbung, Safe Pointer, Observer.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
Singletons, Exceptions und (s)printf. Template Klassen  äquivalent zu Template-Funktionen  beim Erzeugen von Instanzen muss der Typ angegeben werden.
Mit dem Computer kann man ganz toll präsentieren
Verwalten von Daten mit Hilfe von NTFS
Einführung in PowerPoint
Objektorientiertes Modellieren und Programmieren mit Java
Anforderungen an die neue Datenstruktur
Einführung in die Programmierung
SurveyCAU Handbuch - Studierende-.
Java-Kurs Übung Grafik in Java - das Abstract Windowing Toolkit
Titel der Präsentation
Java-Kurs - 5. Übung Das Paradigma der Objektorientierung (OO)
Zusammenfassende Übung 2
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Einführung in die Programmierung
Anpassen von Microsoft SharePoint Onlinewebsite
Titel der Präsentation
Lesen Sie alles darüber Microsoft SharePoint-News
Lesen Sie alles zu Microsoft SharePoint-News
Die PowerPoint-Arbeitsfläche
Titel der Präsentation
Erstellen eines Sitzplans
SS 04 Christiane Rauh Christian Hellinger
Titel der Präsentation
Titel der Präsentation
Titel der Präsentation
Titel der Präsentation
Einführung in die Programmierung
Diplomarbeit Thema Foto erwünscht Bearbeiter: Vorname Nachname
in Word 5 neue Arbeitsweisen Mit jedem zusammenarbeiten, überall
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Titel der Präsentation
Titel der Präsentation
Polymorphie Überladen
1. Die rekursive Datenstruktur Liste 1.3 Rekursive Funktionen
Einführung in die Programmierung
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
9. Vererbung und Polymorphie
Präsentation von Darleen und Michèle
Implementieren von Klassen
Statische und Nichtstatische Methoden Properties / Eigenschaften
Einführung in die Programmierung
 Präsentation transkript:

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

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

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

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

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.

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.

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.

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

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.

Modelldateien Flexible Dateien bestehen aus Chunks ( in beliebiger Reihenfolge)

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

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 };

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 };

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 };

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

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

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

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

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

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

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

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)

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)

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 };

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.