Simulation und 3D-Programmierung Praxis: Dreiecke, Texturen

 Documents

 18 views
of 15
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Description
Simulation und 3D-Programmierung Praxis: Dreiecke, Texturen, Vertex-Buffer Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung…
Share
Transcript
Simulation und 3D-Programmierung Praxis: Dreiecke, Texturen, Vertex-Buffer Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung Visuelle Programmierung Teil 1, WS 12 / 13 Dozent: Dr. Prof. Manfred Thaller Referent: Nelson Marambio Simulation und 3D-Programmierung : Vertex, Interpolation Primitive: einfache geometrische Grundform (Dreieck, Linie, Punkt) Vertex: Eckpunkt einer Primitive Deklaration des Vertexformat nötig, bevor ein Vertex definiert werden kann:  SetFVF (Bitmaske) Interpolation (allgemein): Berechnung von Werten innerhalb definierter Grenzen (hier im Kontext von Farbwerten oder Punkt-Koordinaten)  Vorteil: Programmierer muss nur Grenzwerte definieren  Nachteil: Ergebnis optisch nicht zwangsläufig ansprechend, Beispiel Scanner Simulation und 3D-Programmierung : Vertex struct Svertex { tbVector3 vPosition; DWORD dwColor; }; Simulation und 3D-Programmierung : Primitive-Type Primitive: einfache geometrische Grundform (Dreieck, Linie, Punkt) Primitive-Type präzisiert den Modus, wie z.B. bei einem Dreieck die Punktkoordinaten verarbeitet werden, wesentlich • Dreieckslisten (intuitiv, drei Punkte bilden ein Dreieck, d.h. Anzahl der Punkte muss durch 3 teilbar sein) • Verbundene Dreiecke (Anzahl der Punkte > 3, „1. Seite des 2. Dreiecks ist die 3. Seite des 1. Dreiecks“, S. 142) Simulation und 3D-Programmierung : Render-States R-S setzen Einstellungen für die gesamte Szene, z.B. • Beleuchtung • Füllmodus • Schattierung • Culling (welche Primitive werden überhaupt angezeigt ?) • Dithering (Farbe eines Pixels wird aus den Farben umliegender Pixel gemischt) Simulation und 3D-Programmierung : Matrizen Rendering: Bild wird intern, d.h. nicht sichtbar, gezeichnet und abgespeichert Projektionsmatrix: unbewegtes, dreidimensionales Bild benötigt Sichtfeld (Winkel), Seitenverhältnis, Sichtfeld-Grenze (Clipping) Translationsmatrix: definiert den Abstand des Objekts zum Betrachter Rotationsmatrix: definiert Umdrehung eines oder mehrerer Objekte pro Render-Vorgang Simulation und 3D-Programmierung : Zeichenvorgang 1) Render-States setzen 2) Bildpuffer leeren (komplett, oder nur einzelne Objekte), Übersicht Parameter S. 140 3) Szene einleiten (IDirect3Device9::BeginScene() ) 4) Objekte in Bildpuffer zeichnen (hier: einzelnes Dreieck) 5) Szene beenden (IDirect3Device9::EndScene() ) 6) Bildpuffer ausgeben (IDirect3DDevice9:Present(), S. 144) Simulation und 3D-Programmierung : Texturen Textur = Grafik, die definiert um ein dreidimensionales Objekt „gewickelt“ wird Texel = Pixel einer Textur Schema (bei Dreieck): jedem Vertex wird ein Punkt der Textur zugeordnet, dadurch wird der passende Ausschnitt der Textur ohne Verzerrung über das Objekt gelegt (Textur-Koordinaten sind unabhängig von absoluter Auflösung, Größe eines Punktes wird berechnet ) Ursprung linke obere Ecke Simulation und 3D-Programmierung : Texturen Textur = Grafik, die definiert um ein dreidimensionales Objekt „gewickelt“ wird Texel = Pixel einer Textur Schema : jedem Vertex wird ein Punkt der Textur zugeordnet, dadurch wird der passende Ausschnitt der Textur ohne Verzerrung über das Objekt gelegt (Textur-Koordinaten sind unabhängig von absoluter Auflösung, Größe eines Punktes wird berechnet ) Ursprung linke obere Ecke Simulation und 3D-Programmierung : Sampler-States Sampler-States informieren über die Methode, mit der die Grafikkarte die Farbe eines texturierten Pixels ermittelt Intuitiv: absolutes Auslesen des korrespondierenden Texels  Nachteil: Pixelkoordinaten werden bei geringer Distanz zum Objekt abgerundet („Playstation-Effekt“)  Abhilfe: bilinearer Filter a) rundet nicht ab, b) interpoliert mit vier umliegenden Texeln  Effekt: weiche Farbübergänge, Rasterung vermieden Filter definierbar für Textur-Vergrößerung und -Verkleinerung Simulation und 3D-Programmierung : Sampler-States Texturkoordinaten eigentlich immer nur zwischen 0 und 1 (Konvention: x/y für Vertex- , u/v für Texturkoordinaten) Sampler-State D3DSAMP_ADDRESSU , D3DSAMP_ADDRESSV definieren Verhalten, wenn Koordinaten die physische Textur verlassen. Möglichkeiten (S. 154): • Kachelung (mit und ohne Spiegelung) (D3DTADDRESS_WRAP, D3DTADDRESS_MIRROR) • Randfarbe (Werte größer 1 auf 1 zurücksetzen) (D3DTADDRESS_CLAMP) • Definierte Randfarbe (per D3DTADDRESS_BORDERCOLOR) • 1x spiegeln (Betrag aus Koordinate bilden, danach Randfarbe) Simulation und 3D-Programmierung : MIP-Mapping Problem: bei kleinen Objekten ist Textur größer als das Objekt = Textur hat nicht genügend Platz Lösung: MIP (multum in parvo)-Maps erstellen, enthalten kleinere Ausschnitte der Original- Textur (jeweils ¼  256x256 , 128x128, 64x64 usw.) Simulation und 3D-Programmierung : Verwendung, Speicherklasse D3DUSAGE: - 0 für normale Textur, - D3DUSAGE_RENDERTARGET für animierte Texturen - D3DUSAGE_DYNAMIC (komfortabel, aber nicht von jeder GraKa unterstützt) D3DPOOL (in welchem Speicher wird die Ressource abgelegt ?): D3DPOOL _DEFAULT (optimaler Speicher wird ausgewählt) D3DPOOL _MANAGED (Systemspeicher + Kopie in schnelleren Speicher, wenn verfügbar) D3DPOOL_SYSTEMMEN (Systemspeicher, Kopie in anderen Speicher muss manuell angestoßen werden) D3DPOOL_SCRATCH (Systemspeicher, unabhängig, ob Hardware Format der Ressource unterstützt) Simulation und 3D-Programmierung : Vertex- / Index-Buffer Bisher: Anlegen von Arrays aus Punkten in Systemspeicher  einfach, aber langsam Vertex-Buffer: Speicher innerhalb der Grafikkarte, enthält … was ??? Index-Buffer: s.o. Vorteil: schnellere Zugriffszeit, weil näher an „ausführender“ Hardware Simulation und 3D-Programmierung : Sperren Um Daten aus Buffern (woraus später Objekte gezeichnet werden) verändern zu können, muss der Buffer ganz oder teilweise gesperrt werden. Prinzip: - Buffer wird gesperrt - Auslesen der Daten aus Buffer und Kopie in Systemspeicher - (Anwendung kann erst jetzt Daten „sehen“) - Anwendung manipuliert Daten - … kopiert Daten zurück in den Buffer - Entsperrt Buffer - Objekte können gerendert werden
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks