3D- Spieleprogrammierung

Slides:



Advertisements
Ähnliche Präsentationen
Computer Graphics Shader
Advertisements

Grundlagen der Geometrie
Lic.Sc.Inf. Dr. Monique Jucquois-Delpierre
_____________________________ Einführung in die Bildbearbeitung Jucquois-Delpierre 1 Grundlagen Photoshop Ein zentraler Begriff bei Pixelgrafiken.
Klicke Dich mit der linken Maustaste durch das Übungsprogramm!
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
FH-Hof Geometrie Richard Göbel. FH-Hof Aufbau des virtuellen Universums.
FH-Hof Texturen Richard Göbel. FH-Hof Anwendungen von Texturen Darstellung von 2D-Bildern Gestaltung von Oberflächen Simulation komplexer Geometrien...
Bilder und Rasterdaten
Ein Beispiel in Java.
Dynamischer Speicher und Struktur
Simulation und 3D-Programmierung Praxis: Dreiecke, Texturen, Vertex-Buffer Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung.
Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung
Exotische Texturformen
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Lies genau und mach Dir ein Bild!
Computergrafik Vom Dreieck zum Ego-Shooter Olaf Müller
Displacement Mapping Dynamische Generierung detaillierter Geometrien
Special Effects Realistischeres Rendern einer Scene.
Estellen eines Sechskantes mit Abschrägung und Durchbruch
Heute: Scherenzange zeichnen
Das 3 x 3 Geobrett Klicken Sie sich hindurch
Grafikformate Nicolas Ruh.
FHP - Fachbereich Bauingenieurwesen
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
Ich möchte gerne mehrere Bilder auf ein Folie
Projekteilnehmer: Ertas Mutlu Önal Kenan
Textfelder, Grafiken,... Verschieden Übungen Schreibe als Untertitel:
Auf Wunsch einer einzelnen Dame
Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. Manfred Thaller AM 3 Übung: Softwaretechnologie.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Powerpoint 2010 Start Funker Panorama: Zuschauer auf der Elbbrücke beim Weinfest 2011 in Meißen.
Effekte 1 Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung.
Bildbearbeitung GIMP Theorieteil
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Skalare, Vektoren.
DIE FARBEN.
Verhalten von Objekten in der Szene
Theorie Praktische Beispiele
frequenzen einer tonaufnahme. geht so was? liebe grüße und danke viola
Camera, Lights, Action… Dirk Primbs Developer Evangelist
Bildbearbeitung Nicolas Ruh.
Theorie Praktische Beispiele
Objekte und ihre Beschreibung
Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung.
1 Möglichkeiten, Texte darzustellen und zu formatieren.
Beleuchtungsmodelle, Schattierungsmodelle
„Bewegung und Verschiebung“
RAUMTRANSFORMATIONEN
PART V CONTACT PHYSICS Chapter Aufbaumodul 3: Visuelle Programmierung II Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung Prof.
Parallelisierung für Multiprozessor-Maschinen
Textfelder, Grafiken,... Schreibe als Untertitel:
Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung
Erfahrungen mit Microsoft DirectX 8 W. Krug, April 2002.
Breakanoid – Bälle & Blöcke Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Übung: Visuelle Programmierung I –
Zeichnen Mit den Officeprogrammen kann man sehr viele einfache Grafiken direkt im Programm erstellen. Es handelt sich um ein Zeichenprogramm Malprogramme.
Universität zu Köln WS 2014/15 HKI – Softwaretechnologie 2 (Teil 1) Von Tilo Kochs.
Schaltfläche-Star 1 Schaltfläche Star. Schaltfläche-Star 2 Beispiel Star Erstellen eines grünen Rechtecks: Hintergrund auf Größe 200x50 Pixel minimieren,
Die Welt der Shader Universität zu Köln WS 14/15 Softwaretechnologie II (Teil 1) Prof. Dr. Manfred Thaller Referent: Lukas Kley Fortgeschrittene Techniken.
Optische Täuschungen Was sind optische Täuschungen ?
Bildbearbeitung: Theorie
1. Charakteranimation 2. PlugIns schreiben und laden Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung WS 2010/2011.
AGP, PCIE Bus im Vergleich AGP: Accelerated Graphic Port 1997 von Intel entwickelt. Ab 1998 AGP dann in großem Stil in PCs als Grafikkartensteckplatz verwendet.
Die Renderpipeline.
Multimedia und Virtual Reality Vorlesung am Martin Kurze Multimedia in 3D.
Grundlagen der Geometrie
Grafikformate Nicolas Ruh.
ROBERT NYSTROM GAME PROGRAMMING PATTERNS III.8 Thema: Sequencing Patterns Seminar: Softwaretechnologie II (Teil 2) Dozent: Prof. Dr. Manfred Thaller Referent:
Aufbau und Funktion von 3D- Grafikkarten von Christian Reis.
 Präsentation transkript:

3D- Spieleprogrammierung Softwaretechnologie II Dozent: Herr Prof. Dr. Manfred Thaller WS 13/14 Referent: Christian Braun

Das 1. Dreieck! Texturen!

Was brauchen wir dafür? Das 1. Dreieck Initialisierung der Szene Definition des Dreiecks(Art, Größe, Farbe..) Definition des Rahmens(Sichtfeld,, 3D-Effekt, Beleuchtung, Dithering..) Zeichenvorgang Position und Verhalten des Dreiecks(Ausrichtung, Entfernung, Rotation) Eigentlicher Zeichenvorgang

Eck- oder Scheitelpunkt einer Primitive => Dreieck, Linie, Punkt Vertex/ Vertizes Eck- oder Scheitelpunkt einer Primitive => Dreieck, Linie, Punkt enthält Angaben zu Position, Farbe, Transparenz usw… Grundsatz für die meisten Informationen: Interpolation zwischen Vertizes Initialisierung Vertexformat aktivieren struct SVertex { tbVector3 vPosition; // Position des Vertex DWORD dwColor; // Farbe des Vertex static const DWORD dwFVF; // Vertexformat (statisch) };

Initialisierung Dreieck definieren Dreieck definieren Svertext g_aTriangleVertex[3]; //Globale Variable g_aTriangleVertex[0].vPosition = tbVector3 ( 0.0f, 1.0f, 0.0f); // oben g_aTriangleVertex[1].vPosition = tbVector3 ( 1.0f, -1.0f, 0.0f); // rechts unten g_aTriangleVertex[2].vPosition = tbVector3 ( -1.0f, -1.0f, 0.0f);// links unten g_aTriangleVertex[0]. dwColor = tbColor3 ( 1.0f, 0.0f, 0.0f); // Rot g_aTriangleVertex[1]. dwColor = tbColor3 ( 0.0f, 1.0f, 0.0f); // Grün g_aTriangleVertex[2]. dwColor = tbColor3 ( 0.0f, 0.0f, 1.0f); // Blau

Render- States Einstellungen, um später etwas auf Bildschirm sehen zu können Kontrolle des Rasterizers sowie Anweisung, WIE das Dreieck gezeichnet werden soll SetRenderState => Setzt Status auf angegebenen Wert GetRenderState => Fragt Status ab und liefert ihn zurück Starten alle mit: D3DRS_ Möglichkeiten des Render-States: Beleuchtung Schattierung Füllmodus Dithering Initialisierung

..fehlender Farbgenauigkeit.. Render- States DITHERING Initialisierung Geringe Anzahl verfügbarer Farben führt zu.. ..fehlender Farbgenauigkeit.. ..starker Verpixelung!

= 1 Pixel Violett Initialisierung Rende- States DITHERING Initialisierung Technik zur Erzeugung größerer Farbtiefen: Pixel wird von menschlichem Auge nicht als Einzelobjekt wahrgenommen eine Farbe wird aus verschiedenfarbigen Pixeln gemischt 1 Pixel Blau + 1 Pixel Rot = 1 Pixel Violett

300 Farben OHNE Dithering 16 Farben MIT Dithering Initialisierung RENDER-STATES DITHERING Initialisierung 300 Farben OHNE Dithering 16 Farben MIT Dithering

Initialisierung RENDER-STATES Fertige Render-States für unser Dreieck tbResult InitScene() { HRESULT hResult; g_pD3DDevice->SetRenderState(D3DRS_Lighting, FALSE); g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE); Return TB_OK; }

Initialisierung Bestimmt, welcher Teil der Weltmatrix dargestellt wird Projektionsmatrix Bestimmt, welcher Teil der Weltmatrix dargestellt wird erschafft den eigentlichen 3D Effekt weiter entfernte Objekte erscheinen kleiner, Nahe wirken Groß Initialisierung 3D- Effekt erstellen //Bildseitenverhältnis berechnen Float fAspect = (float)(g_Direct3DParameters.VideoMode.Width) / (float)(g_Direct3DParameters.VideoMode.Heigth); //Projektionsmatrix erzeugen tbMatrix mProjection = tbMatrixProjection (TB_DEG_TO_RAD(90.0f), //Sichtfeld: 90° fAspect, //Bildseitenverhältnis 0.1f, //Nahe Clipping-Ebene 100.0f); //Ferne Clipping-Ebene //Projektionsmatrix einsetzen G_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*) (&mProjection));

Zeichnen/ Rendern tbMatrixTranslation Translationsmatrix tbMatrixTranslation verschieben des Dreiecks im dreidimensionalem Raum Beobachter befindet sich(ohne spezielle Sichtmatrix) beim Punkt (0,0,0) Dreieck wird im Beispiel auf (0,0,2), also um 2 Einheiten in die Tiefe verschoben tbMatrixRotationY Rotation um die Y-Achse, einzig ein Winkel wird benötigt Winkel sollte sich parallel zur abgelaufenen Zeit seit Programmstart erhöhen => gleichmäßige Drehung Zeichnen/ Rendern Rotationsmatrix

Zeitzähler Zeichnen/ Rendern tbResult Move(float fNumSecsPassed) { g_fTime += fNumSecsPassed; // Zeitzähler erhöhen return TB_OK; } Variable g_fTime wird erhöht um die abgelaufene Zeit seit dem letzten Bild!

Zeichnen/ Rendern Translation & Rotation tbResult Render(float FNumSecsPassed) { // Rotations- Translationsmatrix des Dreiecks erzeugen tbMatrix mRotation(tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime *90.0f))); tbMatrix mTranslation(tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f))); //Beide Matrizen kombinieren und als Weltmatrix einsetzen tbMatrix mWorld(mRotation * mTranslation); g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMatrix*)(&mWorld)); Return TB_OK;

Zeichnen/ Rendern Zeichenvorgang g_pD3DDevice->BeginScene(); //Szene Beginnen If(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP( // UP= User Pointer D3DPT_TRIANGLELIST, //Dreiecksliste 1, //1 Dreieck g_aTriangleVertex, //Vertizes sizeof(Svertex)))) //Vertexgröße g_pD3DDevice9::EndScene(); //Szene beenden g_pD3DDevice->Present(NULL, NULL, NULL, NULL); //Bildpuffer sichtbar machen Return TB_OK; } Zeichnen/ Rendern

Simulation von unterschiedlichsten Oberflächen Sinn und Zweck Nichts weiter als Bilder, welche charakteristische Muster und Farben auf Oberfläche übertragen Simulation von unterschiedlichsten Oberflächen aus Kugel wird mit passender Textur Fußball Gute Verarbeitungsgeschwindigkeit => kein Unterschied in Performance zwischen einem texturierten und einem nicht texturierten Dreieck Nachteil: Eventuelle Unebenheiten werden nicht berücksichtigt, Oberfläche bleibt stets flach Texturen

Wie wird die Textur an das Objekt angelegt und positioniert? Hmm..? Texturen Wie wird die Textur an das Objekt angelegt und positioniert?

Textur enthält TEXEL => Pixel einer Textur Texturkoordinaten Textur enthält TEXEL => Pixel einer Textur Zuordnung von Texel(Textur) und Vertex(Objekt) jeder Vertex erhält sein Gegenüber auf der Textur Texturen (0,0) 0,5 1 u-Achse Zweidimensionales Texturkoordinatensystem 0,5 1 (1, 1) v-Achse

Bevorzugter Speicherplatz: Grafikkarte Speicher und Größe Bevorzugter Speicherplatz: Grafikkarte Häufiger Zugriff nötig, schneller Zugriff gewährleistet Große Texturen problematisch, weil zu wenig Speicher Bevorzugte Größe: quadratische Texturen Zweierpotenzregel beachten viele 3D Grafikkarten akzeptieren nur Texturen, dessen Breite und Höhe Zweierpotenzen sind 1, 2, 4, 8, 16, 32… Texturen

Hmm..? Bei Objekten, welche nah an der Kamera und dementsprechend groß sind, erscheinen hässliche, verpixelte Vierecke?! Texturen Texturauflösung zu gering = Mehr Pixel als Texel = Viele nebeneinanderliegende Pixel erhalten den gleichen Texel

Auflösung der Textur erhöhen Bilineare Filter Lösungsmöglichkeit 1: Auflösung der Textur erhöhen ..ABER: Ressourcenunfreundlich hohe Speicherplatzbelegung Grafikkartenspeicher Texturen Lösungsmöglichkeit 2: Interpolation zwischen vier Texturkoordinaten des nächst gelegenen Texel Vergrößerte Texturen werden nicht eckiger, sondern runder/weicher

So siehts aus! Texturen

Hmm..? Texturen Der bilineare Filter hat keinen Sinn bei weit entfernten, kleinen Objekten. Was nun?

Größe der Textur verändern MIP- Mapping Größe der Textur verändern es entstehen viele verschiedene Versionen einer einzigen Textur Direct3D wählt selbstständig passende Version aus 256 x 256 => 128 x 128 => 64 x 64 => 32 x 32 … Texturen

..die Aufmerksamkeit! Danke für..