Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung.

Ähnliche Präsentationen


Präsentation zum Thema: "Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung."—  Präsentation transkript:

1 Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Dozent: Prof. Dr. Manfred Thaller Referentin: Maike Wosnitza Effekte I

2 Inhalt Nebel Beleuchtung Alpha-Blending Multi-Texturing

3 Nebel 1. Realistischer 2. Verhindert Grafikfehler – Objekte springen nicht plötzlich aus dem Nichts 3. Fördert enorm die Atmosphäre Nebelarten Linearer Nebel (feste Start- und Enddistanz) Exponentieller Nebel (keine Start- und Enddistanz) einfach exponentieller Nebel quadratisch exponentieller Nebel

4 Nebel Nebel mit Direct3D Vertexnebel Pixelnebel Tiefennebel (Tiefe z-Koordinate des Pixels bzw. des Vertex) Entfernungsnebel (tatsächliche Entfernung zur Kamera) Entfernungsnebel funktioniert nicht zusammen mit Pixelnebel

5 Nebel – Render-States

6

7 Nebel Beste Einstellung: Hängt vom Einzelfall ab Generell: Vertexnebel (schnell zu berechnen) + Entfernungsnebel

8 Beleuchtung Durch Beleuchtung ist das Gehirn in der Lage, Objekte räumlich zu erfassen Lokale Beleuchtungsmodelle: Lichttypen: Punktlichter – geben Licht in alle Richtungen ab Spotlichter/Scheinwerfer – bündeln Licht in einen mehr oder weniger engen Lichtkegel Falloff – Wert, der bestimmt, in welcher Form die Lichtstärke zwischen dem inneren und dem äußeren Lichtkegel abfällt (bei 1 linear) Richtungslichter – extrem weit entfernt, so dass sie scheinbar Licht in nur eine Richtung abgeben (Strahlen nahezu parallel) Hintergrundlicht

9 Beleuchtung Einfallswinkel: Winkel zwischen dem Normalenvektor der Oberfläche und der Verbindungslinie zwischen Oberfläche und Lichtquelle Oberflächen, die senkrecht (0°) zu einer Lichtquelle stehen sind am meisten beleuchtet Je kleiner der Einfallswinkel, desto stärker die Beeinflussung des Lichts Effektive Reichweite: alles was dahinter liegt, kann man sich von der Berechnung her sparen Material: kann jedem Objekt Material zuordnen – bestimmt Eigenschaft der Oberfläche und wie es auf Licht reagiert

10 Beleuchtung Farben: Additive Farbmischung (alle Farben zusammen = weiß) Materialstreufarbe + Lichtstreufarbe Zusammen mit Faktor, der bestimmt, wie stark die Oberfläche vom Licht beeinfluss ist (Einfallswinkel), kann die resultierende Farbe berechnet werden: Farbe = f * Lichtstreufarbe * Materialstreufarbe Glanzkraft: Wenn der reflektierte Strahl direkt in die Kamera fällt oder nahe vorbeifliegt, muss ein Glanzeffekt entstehen Glanzfarbe meistens weiß

11 Beleuchtung

12 Eigenfarbe: Eigenhelligkeit (z.B. Bildschirme) wird hinzu addiert Bisherige Gleichung:

13 Beleuchtung Beleuchtung auf Vertexbasis Nachteil: Beleuchtung auf Vertexbasis reicht nicht aus Light Mapping – Der Lichtfleck wird in Form einer Textur aufgelegt

14 Beleuchtung Glättungsgruppen: trennen, welche Objekte glatt sind und welche scharfe Kanten haben In der Praxis nur eine Zahl – alle Dreiecke mit derselben Glättugnszahl, bilden eine glatte Kante Materialien verdrängen fast vollständig Vertexfarben (D3DMATERIAL9)

15 Beleuchtung IDIRECT3DDEVICE9::SETMATERIAL aktiviert Material GETMATERIAL fragt aktuelles Material ab

16 Beleuchtung G_PD3DDEVICE- >SETRENDERSTATE(D3DRS_LIGHTING,TRUE) Besser D3DRS_COLORVERTEX auf FALSE setzen (sichergestellt, dass Material verwendet wird) Nach getaner Arbeit Einstellungen wieder zurücksetzen Glanzeinstellung über D3DRS_SPECULARENABLE auf TRUE setzen

17 Beleuchtung

18

19 Wie viele Lichter ein Gerät zur Verfügung stellt: MAXACTIVELIGHTS der D3DCAPS9-Struktur Es ist besser, nicht so viele Lichter gleichzeitig zu setzen, da die Bildrate dadurch schlechter wird Bei nicht uniformen Skalierungen: Render-State D3DRS_NORMALIZENORMALS aktivieren

20 Alpha-Blending Dazu da, teilweise transparente oder durchsichtige Objekte zu zeichnen Alte Bildpunkt spielt noch eine Rolle – wird mit neuem Pixel auf bestimmte Weise verknüpft Objekte werden von hinten nach vorne gezeigt Jede Farbe hat einen Alphawert Muss festgelegt werden, wie sich der Blendfaktor vom alten und neuem Pixel berechnet – bestimmt Anteil einer Farbe am Gesamtergebnis

21 Alpha-Blending Je höher der Alphawert des neuen Pixels ist, desto stärker beeinflusst er die endgültige Farbe Aktivierung: D3DRS_ALPHABLENDENABLE – TRUE

22 Alpha-Blending

23 Verknüpfen von altem und neuem Pixel: Render-State D3DRS_BLENDOP

24 Alpha-Blending Woher kommt der Alphawert? Bei Vertexfarben – aus den Vertexstreufarben (auch im Fall von Materialen – Streufarben) Ablauf des Zeichnens: 1. Bildpuffer & Z-Buffer leeren 2. Alle völlig opaken Objekte ohne Alpha-Blending zeichnen 3. Alle transparenten Objekte von hinten nach vorne zeichnen Alpha-Testing: Grafikkarte zeichnet nur Pixel, deren Alphawert eine bestimmte Voraussetzung erfüllen D3DRS_ALPHATESTENABLE auf TRUE

25 Alpha-Blending D3DRS_ALPHAFUNC macht die Vergleichsfunktion – Wert bezieht sich auf Referenzwert, der mit D3DRS_ALPHAREF gesetzt wird

26 Multi-Texturing Zur drastischen Qualitätssteigerung und Einsparungen an Speicher und Arbeit Erlaubt mehrere Texturen übereinander auf ein und dasselbe Dreieck zu legen Einzelne Texturen müssen nicht die gleiche Auflösung haben Texturschicht-States legen fest, wie genau die einzelnen Texturschichten miteinander verknüpft werden Jede Texturschicht hat einen Operator und zwei oder drei Argumente

27 Multi-Texturing

28 Zielregister: Temporäres Register (Zwischenspeicherungen) Standardregister (dieser Wert wird verwendet, um Farbe des zu zeichnenden Pixels zu ermitteln) setzt Alphawert der Texturschicht auf Multiplizieren, erste Argument auf Streufarbe und zweite auf Textur oder umgekehrt sowohl Textur- als auch Streufarbenalphawert tragen zum Ergebnis bei Operatoren festlegen: D3DTSS_COLOROP für Farboperator setzen & D3DTSS_ALPHAOP für den Alphaoperator

29 Multi-Texturing

30 Bestimmten der Argumente: Farbargumente: D3DTSS_COLORARG1, D3DTSS_COLORARG2 & D3DTSS_COLORARG0 Alphakanal: D3DTSS_ALPHAARG1, D3DTSS_ALPHAARG2 & D3DTSS_ALPHAARG0

31 Multi-Texturing Zielregister: mit D3DTSS_RESULTARG Entweder auf D3DTA_CURRENT setzen (Standartregister) oder auf D3DTA_TEMP (temporäre Register) Wie viele Texturen gehen: über MAXSIMULTANEOUSTEXTURES der D3DCAPS9- Struktur Texturkoordinatentransformation: nicht nur Positions- und Normalenvektor sind transformierbar, sondern auch Texturkoordinaten – und zwar einzeln für jede Texturschicht eignet sich hervorragend für viele verschiedene Effekte, wenn es darum geht Texturkoordinaten in Echtzeit zu verändern, ohne die aufwändige Sperrung eines Vertex-Buffers

32 Multi-Texturing weitere Matrizen einsetzen: eine für jede Texturschicht (D3DTS_TEXTURE0, D3DTS_TEXTURE1,...) Texturkoordinatentransformation mit dem Texturschicht- State D3DTSS_TEXTURETRANSFORMFLAGS aktivieren 2D-Texturmatrizen unterscheiden sich von denen in 3D muss TriBase-Funktion TBMATRIXTOTEX2DMATRIX benutzen, um 3D-Transformationsmatrix in eine Texturtransformationsmatrix umzuwandeln

33 Literaturverzeichnis David Scherfgen: 3D-Spiele-Programmierung. München, 2006, S. 182-225.


Herunterladen ppt "Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung."

Ähnliche Präsentationen


Google-Anzeigen