Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
1
Exotische Texturformen
Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung WS 2010/11 Softwaretechnologie II (Teil 1) Simulation und 3D Programmierung Referat von Sara Hommelsen
2
Volumentexturen dreidimensional Angabe der Größe in Pixeln/Texeln
ausgehend von 2D-Textur > bei 3D: flache Textur wird zum Quader > bekommt zusätzlich Tiefe zu Höhe/Breite
3
Volumentexturen 3D-Vektor für Texturkoordinaten: Makros: tbVector3
D3DFVF_TEXCOORDSIZE
4
sonstige Eigenschaften
Filterung Erzeugung von Mip-Maps viel Speicherplatz
5
Schnittstelle bisher: IDirect3DTexture9, nun: IDirect3DVolumeTexture9
> erwarten Methode: IDirect3DDevice9::SetTexture
6
Schnittstelle: Format/Größe
GetVolumeLevel der IDirect3DVolumeTexture9 1. Parameter: Mip-Map-Ebene zum abfragen 2. Parameter: Zeiger auf IDirect3DVolume9 Schnittstelle, die Direct3D erfüllen soll. Aufruf GetDesc > ausgefüllte Textur vom Typ D3Volume_DESC
7
Wozu Volumentexturen? Landschaften Animation Licht/Schatten
8
Herstellung/Ladevorgang
Verwendung von DirectXTextureTool (gehört zum DirectX SDK) DDS-Format
9
Volumentexturen laden
Standard: D3DXCreateTextureFromFile (Ex) Volumen: D3DXCreateVolumeTextureFromFile (Ex) erwartet Tiefe als weiteren Parameter wenn Originalgröße übernommen werden soll, dann: D3DX_DEFAULT letzter Parameter: Adresse des Zeigers auf IDIRECT3DVolumeTexture9-Schnittstelle
10
Umgebungstexturen kubische Umgebungstexturen (in Würfelform angeordnet) Generierung von 6 Texturen Texturen werden auf Objekt gelegt > tatsächliche Struktur , reflektierte Bilder der Umgebung sind sichtbar
11
Texturkoordianten - 1 Flags sind dreidimensional
Texturschicht-State D3DTSS_TEXTURETRANSFORMFLAGS auf D3DTTFF_COUNT3 Schnittstelle IDirect3DCubeTexture9 laden D3DXCreateCubeTextureFromFile (Ex)
12
Texturkoordianten - 2 generieren: DirectXTextureTool
neue Textur erstellen cubeMapTexture wählen um zwischen Würfelflächen hin und her zu schalten: view -> CubeMapView => Bilddateien auf entsprechende Flächen der Würfeltextur laden (s. Standardtextur)
13
Skybox Sky Box = Würfel indem man sich befindet
vorteilhaft, wenn Textur hoch aufgelöst Sky Box und Reflexion: gleiche Textur > Vertizes brauchen 3 Koordinaten
14
Bump Mapping (mit 3D) Simulation der Oberfläche auf Pixelebene
Unterstützung abfragen: im Eintrag sind TextureOpCaps der D3DCAPS-9 Struktur die Flags D3DTEXOPCAPS_BUMPENVMAP gesetzt
15
Bump Mapping Transformation:
U/V-Steigungswerte werden mit 2x2-Matrix multipliziert Matrixangabe m. H. der Texturschicht-States D3DTSS_BUMPENVMAT00 (M11) D3DTSS_BUMPENVMAT10 (M21) D3DTSS_BUMPENVMAT01 (M12) D3DTSS_BUMPENVMAT11 (M22)
16
Luminanz Veränderung: L´= L*S+0
S= Skalierungsfaktor D3DTSS_BUMPENVSCALE O= Offset-Wert D3DTSS_BUMPENVOFFSET
17
Einsetzen der Bump Map Verwendung von 3 Texturen:
Schicht = normale Oberflächenstruktur Schicht = Bump-Map Schicht = Environment Map
18
Aktivierung der Bump Map
Farboperator stellen auf: D3DTOP_BUMPENVMAP D3DTOP_BUMPENVMAPLUMINANCE gleiche Texturkoordinaten: D3DTSS_TCI_CAMERASPACEPERFECTIONVE CTOR und D3DTTFF_COUNT3
19
Erzeugung der Bump Map Direct3D erwartet Steigung oder
durch Umrechnung selbst angeben oder Verwendung von DirectXTextureTool > Speicherung im DDS-Format
20
Environmental Bump Mapping
Neuberechnung der Vektoren
21
Stencil-Buffer - 1 Teil des Z-Stencil-Buffers verschiedene Formate:
D3DFMT_D32 D3DFMT_D16 D3DFMT_D24S8
22
Stencil-Buffer - 2 Der Clear-Methode der Schnittstelle IDirect3Device9
werden Flags D3DCLEAR_TARGET, D3DCLEAR_ZBUFFER, Flag D3DCLEAR_STENCK übergeben > leert Stencil-Buffer
23
Stencil-Buffer - 3 2^Anzahl der Stencil-Buffer reservierten Pixel – 1
>größter Wert, den Stencil-Buffer in einem Pixel erreichen kann
24
Stencil-Buffer - 4 Zweck: Reihe von Effekten in Echtzeitberechnung
Format: Z-Stencil-Buffer setzen von Render-State D3DRS_STENCILABLE auf TRUE => alle gezeichneten Primitive verwenden Stencil-Buffering
25
Stencil-Test wenn Render-State D3D_STENCILABLE auf TRUE, dann Test
Aufstellung gezielter Vergleichsfunktion und Referenzwert
26
Schreiben in Stencil-Buffer
Festlegung was mit Stencil-Wert geschehen soll Werte können für Render-States eingesetzt werden (vgl. Tab. S. 247) Vergleich aller Stencil-Werte mit Referenzwert, festlegen mit D3DRS_STENCILREF
27
Lese- und Schreibbitmasken
Einführung, weil manchmal nur einzelne Bits eines Stencil-Werts getestet werden sollen gesetzt in Form von Render-States Schreibbitmaske: Bitmaske wird mit bitweisem &-Operator auf alle Werte im Stencil-Buffer angewendet Lesebitmaske: Anwendung von Direct3D auf Referenzwert und auf aus Stencil-Buffer gelesene Werte
28
zweiseitiger Stencil-Buffer-Modus
Flag D3DSTENCILCAPS_TWOSIDED im Element Stencilcaps der D3DCAPS9- Struktur gesetzt Render-State (RS) D3DRS_TWOSIDEDSTENCILMODE auf TRUE danach weitere RS zur Verfügung RS legen Stencil-Buffer-Einstellungen fest, die auf Bildschirm GEGEN den Uhrzeigersinn angeordnet sind Referenzwert und Schreibbitmasken werden NICHT voneinander getrennt betrachtet.
29
Stencil-Buffer füllen ohne Bildpufferfüllung
Beschreibung des Stencil-Buffers auf 2 Weisen Clear-Methode zeichnen von Primitiven mit aktiviertem Stencil- Buffering um Abdruck im Stencil-Buffer zu hinterlassen: Vergleichsfunktion: D3DRS_STENCILFUNC auf D3DCMP_ALWAYS für D3DRS_STENCILPASS: D3DSTENCILOP_REPLACE und D3DRS_STENCILSREF auf den Wert der von Primitiven hinterlassen werden soll
30
D3DX Effekte Aufteilung des Render-Vorgangs:
Zeichnung aller Dreiecke die Material A/Textur A verwenden, dann alle die Material B/Textur B verwenden usw. VOR jedem Rendern: Material muss eingesetzt werden, eventuelle Veränderungen einiger Werte
31
Effekte D3DX definiert Effektschnittstelle ID3DXEffect Techniken
Durchgänge
32
Render States & Co. Wertezuweisung
Texturschicht-/Samplerstate: Darstellung als Array Übernahme aller Namen ohne Präfixe
33
Transformationsmatrizen
Worldtransform ViewTransform ProjectionTransform TextureTransform
34
Variablentypen Texture DWord Float String
35
Laden eines Effekts kann aus Datei/Speicher o.ä. geladen werden
Funktion: D3DXCreateEffectFromFile
36
Mit Effekten rendern - 1 Technik durch Typ D3DXHANDLE ansprechen
Anzahl verfügbarer Technik Methodenaufruf: ID3DXEffect::GetDesc füllt Struktur D3DXEFFECT_DESC aus Techniques-Element for-Schleife Methode ID3DXEffect::ValidateTechnique dafür D3DXHANDLE-Variable In for-Schleife: Index steht zur Verfügung
37
Mit Effekten rendern - 2 4. Methode GetTechnique erwartet Technikindex, liefert D3DXHANDLE zurück, der für ValidateTechnique gebraucht wird 5. wenn erfolgreich, dann Aktivierung m.H. der Methode ID3DXEffect::SetTechnique
38
Effekte aktivieren Effekt aktivieren mit ID3DXEffect::Begin
1. Parameter: Zeiger auf UINT 2. Parameter: 0 oder D3DXFX_DONOTSAVESTATE
39
Rendern Durchgang jedes einzelnen Durchgangs mit for-Schleife
VOR jedem Zeichenvorgang Methodenaufruf ID3DXEffect::BeginPass Aufruf EndPass >nachdem alles gezeichnet ist: ID3DXEffect::End
40
Transformation umgehen
Vertizes wandern durch Transformationspipeline rein: einfache objektrelative/absolute Positionsangaben raus: fertig bearbeitete 2D-Koordinaten Umgehung durch transformierte Vertizes
41
Unterschied - 1 x/y-Koordinate: echte Bildschirmkoordinaten mit 1 Pixel als Einheit z-Koordinate muss zwischen 0 und 1 liegen zusätzliche Angabe von w-Koordinate
42
Unterschied - 2 transformierte Vertizes: keine Beleuchtung
keine Garantie, dass Clipping durchgeführt wird >transformierte Vertizes hervorragend, weil Raum zur Entwicklung eigener Verfahren
43
anderes Vertexformat transformierte Vertizes:
44
Imitation von DirectDraw
Blitting > kopieren eines bestimmten Bereichs eines Quellbildes auf ein Zielbild > Verwendung hauptsächlich um Grafikobjekte zu zeichnen, die in seperaten Oberflächen gespeichert sind > immer dann verwenden, wenn Texturen im Spiel sind
45
Color Keying bestimmte Farben werden ausgelassen
in Quellbildern gespeicherte Objekten wird Hintergrundfarbe zugewiesen Pixel in dieser Farbe werden verworfen Verwendung von Alpha-Kanal um Informationen zu speichern nichtkopierte Pixel = Alphawert 0 eingebauter Alphakanalgenerator: D3DXCreateTextureFromFile (Ex)
46
Rotation Veränderung der Vertex-Position, die Rechteck formen
keine Verwendung von Transformationspipeline, sondern Funktion tbvector2TransformCoords > damit Transformation der Vertizes von Hand mit einer vorher erstellen Rotationsmatrix
47
andere Methode für 2D-Grafik
Verzicht von Sichtmatrix und Projektionsmatrix -> Identitätsmatrix Z-Koordinate muss zwischen 0 und 1 liegen Vorteile: kein anderes Vertexformat, Verwendung von Weltmatrix, Clipping funktioniert
48
In Texturen rendern - 1 erstellen einer Textur/Z-Buffers
- Identifizierung der Grafikkarte als Render- Target - Flag: D3DUSAGE_RENDERTARGET übergeben an Funktion D3DCreateTextureFromFile oder Methode IDirect3DDevice9::CreateTextur e
49
In Texturen rendern - 2 - Flag wird für usage-Parameter angegeben
- Speicherklasse muss D3DPOOL_DEFAULT sein - Erzeugung Z-Stencil-Buffer mit Flag D3DUSAGE_DEPTHSTENCIL
50
In Texturen rendern - 3 2. Schritt: neues Render-Target setzen
- rendern auf neu erzeugte Textur und Z-Stencil-Buffer m.H. von 2 Methoden: IDirect3DDevice9::SetRenderTarget SetDepthStencilSurface - erwarten Zeiger auf Direct3D-Oberfläche - zuerst: Oberfläche - SetRenderTarget erwartet Render-Target-Index
51
In Texturen rendern - 4 3. Schritt: alles rendern was in Textur erscheinen soll - Aufurf von clear am Anfang - Textur: andere Auflösung als alte Back-Buffer
52
Einfacher mit D3DX erleichtert Vorgang enorm
folgende Schnittstellen: ID3RenderToSurface ID3DRenderToEnvMap -> Schnittstellen kümmern sich um Erzeugung Z-Stencil-Buffer, Anpassung an Viewport, ermöglicht rendern auf Texturen, die mit Mip-Mapping arbeiten
53
DANKE!
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.