DirectX
Großes Seminarvon
Frank Deseyve
Inhalt• Einleitung
• Grundlagen
• API‘s– DirectDraw & Direct3D
• Fazit
Warum DirectX?• PC mit MS-DOS
– Zu viele verschiedene Kombinationen
• Einheitlicher Zugriff auf verschiedene Hardware– Schnell
– Effektiv
– Direkt
• Marktstrategie– Windows forcieren
• Moderne 3D Spiele Software– Maximale Belastung der HW
– Audiovisueller Hochgenuß
Geschichte• Game SDK (1994)
– Vollbildmodus
– Einprozess-System • DirectX 1.0 (1995)
– DirectDraw– DirectInput– DirectPlay– DirectSound
• DirectX 2.0 (1995)– Direct3D
• DirectX 3.0 (1996)
– DirectSound3D, MMX Device
Geschichte• DirectX 5.x (1997)
– Vertex Buffer– Force Feedback– 3D Audio Hardware Acceleration– Multimonitor Support
– DirectX Setup • DirectX 6.x (1998)
– Single-Pass Multitexturing– Bump Mapping– Texture Compression– Stencil Buffers– DirectMusic API
Geschichte• DirectX 7.x (1999)
– Transform and Lightning HAL Device
– Vertex Blending
– Cubic Environment Mapping
– Spezieller Visual Basic Support
• DirectX 8.x (2000)– DIRECT3DX
– Vertex Shader
– Pixel Shader
Geschichte• Windows 95
– bis DX 8.0a, danach eingestellt
• Windows 98– DX 8.1
• Windows NT/2000– SP6 ~DX3.0a / DX 8.1
• Windows XP– DX 8.1
Vorbereitungen• DirectX SDK 8.1
– Runtime Version
– Debug Version
• MS Visual C++– Einstellen der Pfadinformationen der DX-SDK Dateien
– Linken von zusätzlichen Bibliotheken (ddraw.lib, dxguid.lib, d3dim.lib)
– Einbinden der Header je nach verwendeter Funktion
COM• Component Object Model
– Schnittstelle/Implementierung
– Sprachunabhängig
– Wiederverwendbar
COM• Schnittstelle/Implementierung
• IUknown– QueryInterface()
• Global Unique Identifier– Jedes Schnittstelle bekommt einmalige Nummer
– egal wie oft aufgerufen
– egal aus wieviel verschiedenen Prozessen
• Referenzzähler– AddRef()
– Release()
COM• Sprachunabhängig
• Zeigersystem von COM
COM• Wiederverwendbar
– Schnittstellen dürfen nicht verändert werden
– Alte Schnittstellen müssen Weitergeführt werden
• Abwärtskompatibel– IDirectDrawSurface3
– IDirectDrawSurface7
Architektur• HAL - Hardware Abstraction Layer
• HEL - Hardware Emulation Layer
Architektur• HAL - Hardware Abstraction Layer
– Schnittstelle zwischen Hardwaretreiber und Applikation
– Kapselt die Funktionalität der HW
– Enthält Tabelle der unterstützten Funktionen
• TnLHAL– Muß von Hardware unterstützt werden
– Erstmalig Geometrie Berechnungen in HW
Architektur• HEL - Hardware Emulation Layer
– Die meisten Funktionen können emuliert werden– Signifikant langsamer als HAL
• RGB– Softwarerendering – Vereinfachtes Modell– Schnelleres testen der Programme
• Reference Device– Exaktes abbilden der HW in Software– Zum überprüfen der programmierten Effekte auch ohne vorhandene HW
• Praxis: HEL wird nicht ausgeführt, sondern übersprungen
Performance• Problem: Windows Multitasking BS
• Einzelne Ressourcen verteilt auf mehrere Prozesse• Konservatives Scheduling dieser Ressourcen
– Gegenseitiges unterbrechen der Prozesse
• Träger Overhead von Windows – Anmeldung, Prüfen, Verarbeitung, Weiterleiten, Ausführen
Performance• Lösung: Pseudo Single Process System
– Ressourcen "bis auf weiteres" anfordern
– Zustände sichern
– In der Regel wird der aktive Prozeß durchgesetzt
– Im Unterbrechungsfall wird vor Wiederaufnahme der alte Zustand hergestellt oder ein Fehler gemeldet
Komponenten• Funktionalität zum Programmieren
• Schneller Zugriff auf MM-Fähigkeiten von Windows
Komponenten• DirectX Foundation
– DirectDraw
– Direct3D Immediate Mode
– DirectSound
– DirectMusic
– DirectInput
– DirectPlay
Komponenten• DirectX Media Layer
– DirectX Transform
– DirectAnimation
– DirectShow
– Direct3D Retained Mode
DirectDraw
DirectDraw• IDirectDraw7
– Generischer zugriff auf DD Objecte
• IDirectDrawClipper– Fensterliste rechteckiger Bereiche
• IDirectDrawSurface7– Video- oder Systemspeicherbereich
• IDirectDrawPalette– indizierte Farblisten
• IDirectDrawVideoPort– spezielle Videofunktionen der HW
DirectDraw
• lpGUID– NULL := Standardtreiber
– DDCREATE_EMULATIONONLY := keine HW-Beschleunigung
– DDCREATE_HARDWAREONLY := keine Emulation
• lplpDD– Platzhalter für DD-Schnittstelle
• iid– Typ der Schnittstelle
DirectDraw
• hWnd– Handle des Obersten Fenster der Anwendung
• dwFlags– DDSCL_Normal := Verhalten wie Windows-Anwendung
– DDSCL_EXCLUSIVE := Alleiniger Grafik HW Zugriff
– DDSCL_FULLSCREEN := Vollbildmodus
– DDSCL_ALLOWREBOOT := Erlaubt Neustart
DirectDraw
• lpDDSurfaceDesc2– Zeiger auf Beschreibung der Oberfläche
• lplpDDSurface– Platzhalter für Zeiger auf den Speicherbereich
• ZeroMemory(PVOID Destination, DWORD Length);
DirectDraw• Arten von Oberflächen
• Offscreen OF– Zum Ablegen andere Bitmapobjecte
• Primäre OF– Zur Darstellung auf dem Bildschirm
• Hintergrundbuffer– Zum schnellen wechseln mit der POF (Flippen)
• Z-Buffer– Tiefeninformationen, Sichtbarkeit von Objekten
DirectDraw
• Schnelles Wechsel der Oberflächen während des Strahlrücklaufs
• Erstellen einer Umschaltungskette
• DDSurfaceDescription
• Animationen kleiner Objekte (Sprites)
• Animationen des ganzen Bildschirms (Parallax Scrolling)
DirectDraw
• Nach festlegen der SCL
• Vor erstellen der Primären OF
• Schneidet nicht sichtbare Bereiche ab
DirectDraw• Zeichnen auf Oberflächen
• Zugriff über DirectDraw
• BitBlt(); oder BltFast();– Direkter Zugriff auf den Speicherbereich mittels Lock();
– Skalierungen
– Binäre Masken
• Zugriff über das GDI für komplexere Zeichentools
• GetDC();– Text
– Kurven
– Geometrische Figuren
Direct3D• Die 3D-Pipeline
• Transformation– Translierung
– Skalierung
– Rotation
• Clipping– Im Sichtfeld liegende Objekte
– Abschneiden
– Weglassen
Direct3D• Beleuchtung
– Lichtstärke von Bereichen
– Reflexionen
– Vorbeleuchtet oder Dynamisch berechnet
• Texturierung– Oberflächeneigenschaften
• Entfernen verborgener Oberflächen– Hidden Surface Removal
– Performance
• Rasterisierung– 3D-Welt in 2D-Pixel Darstellung rendern
Direct3D• 3D-Objekte erzeugen
• Vektoren fester Länge und Richtung
Direct3D• Positionsvektoren
– mit Beleuchtung
– mit Farbe
– mit Texturen
– mit Normalenvektor
• sind Vertices
Direct3D• Erstellen der 3D-Objektdaten - Grundfiguren
• Dreieckslisten
Direct3D• Erstellen der 3D-Objektdaten - Grundfiguren
• Dreiecksstreifen
Direct3D• Erstellen der 3D-Objektdaten - Grundfiguren
• Dreiecksfächer
Direct3D• Erstellen der 3D-Objektdaten - Zeichnen
• dptPrimitiveType– D3DPT_TRIANGLELIST– D3DPT_TRIANGLESTRIP– D3DPT_TRIANGLEFAN
• dwVertexTypeDesc
– Typ der Vertices (unbeleuchtet, vorbeleuchtet, aut.beleuchtet)
Direct3D• Besser indizierte 3D-Objektdaten - Zeichnen
• lpwIndices– Zeiger auf Array mit den Werten der Indizes
• dwIndexCount– Anzahl der Indizes
Direct3D• Optimal komplexe 3D-Objektdaten
• Einlesen von .X Dateien– Klasse CD3DFile .Load(); .Scale(); .Render();
• Templates– Verticesheader– Normale-Spitzen– Textur-Kanten– Beleuchtung– Frames
• Lightwave, 3DSM
• DX-SDK bietet spezielle Konvertierungstools– CONV3DS.EXE
Direct3D• Objekttransformation
• Matrizen ermöglichen einfache Berechnung
• Klasse D3DMath
Direct3D• Translation Skalierung
• Rotation um X,Y,Z Achse
Direct3D• Komplexe Transformationen: Animationen
• Templates– FloatKey
– TimedFloatKey
– AnimationKey
– AnimationOptions
– Animation
– AnimationSet
• Auf hierarchierte Objekte
• Frames
Direct3D• Oberfläche der Objekte
• Texture Mapping– Bitmaps in Surfaces
– Max 8 Stufen für Effekt
– Überblenden, mischen usw.
Direct3D• 4 Arten der Adressierung (u,v)
• Wrap– Periodische Wiederholung
• Mirror– Exkates Spiegel an einer Achse
Direct3D• Clamp
– Außerhalb liegende Texel werden auf die nächste Kante gemapt
• Border Color– Außerhalb liegende Texel werden eingefärbt
Direct3D• Mip-Mapping
– Gleiche Texturen in verschieden Qualitäten
– Je nach Entfernung
Direct3D• Point-Sampling
– Mittelwert aus 2 Texel
• Bilineare Filterung– Gewichteter Mittelwert aus 4 Texel
– Mit Mip-Maps kombinierbar
• Trilineare Filterung– Braucht Mip-Maps
– Mittelwert aus dem Vor- und Nachmipmap
– Weiche Übergänge, gute Qualität
Direct3D• Beleuchtung der Objekte
• Umgebungslicht
• Punktlichter Scheinwerfer Gerichtetes Licht
Direct3D• dltType
– Art des Lichts
• dcvDiffuse, dcvSpecular, dcvAmbient– Farbe des Lichts
• dvPosition, dvDirection, dvRange– Positionierung des Lichts
• dvFalloff– Lichtintensität Kegel
• dvAttenuation– Konstante, Lineare, Quadratische Abschwächung
• dvTheta, dvPhi– Kegelwinkel
Direct3D• IDirect3Ddevice7:SetMaterial()
– Material der Objektoberfläche
• Ambient– Umgebungsreflektion
• Diffuse– Diffuse Reflektionen
• Specular– Glanzlichter
Direct3D• Darstellung auf dem Bildschirm
• Welttransformation– Für jedes Objekt
Direct3D• Ansichtstransformation
– Der Blickwinkel des Betrachters/Kamera
• mat: Referenz auf die resultierende Matrix
• vFrom: Position des Betrachters
• vAt: Position auf die geschaut wird
• vWorldUp: Vom Betrachter nach oben gehender Vektor
Direct3D• Sichtkegel
• mat: Referenz auf eine existierende Matrix • fFov: Sichtfeld in Radian• fNearPlane: Abstand der nahen Clippingebene vom Betrachter• fFarPlane: Abstand der fernen Clippingebene vom Betrachter
Direct3D• Bildschirmtransformation
• dwX: Pixelkoordinate der linken Seite des Viewports
• dwY: Pixelkoordinate der rechten Seite des Viewports
• dwWidth: Breite des Viewports in Pixeln
• dwHeight: Höhe des Viewports in Pixeln
• dvMinZ:kleinster transformierter Z-Wert für die nahe Clippingebene, wird üblicherweise auf 0.0 gesetzt
Direct3D• Fortgeschrittenen Funktionen
• Z-Buffer– Tiefeninformationen
Direct3D• Stencil-Buffer
• Indizierte Schablone im Pixelbereich
• 1-bit– Maskierung von Bildinhalten
– Überblendeffekte
• 8-bit– Echtzeit Volumennebel
– Reflexionen
Direct3D• Bump-Mapping
– Strukturierte Objectoberflächen
• Emboss– Monochrome Textur in Lichtrichtung verschoben
– Kummuliert mit Basis
• Environment– Berechnet reflektierende Licht an jedem Texel
– Sehr genaues Abbild
– Inkompatibel mit dynamischen Lichtquellen
Direct3D• Environment-Mapping
– Simulation von reflektierenden Oberflächen
– Statisch oder Dynamisch
DirectSound• Flexibler Audiomixer
• Nutzt AudioHW wenn möglich, sonst SW
• Schnell, geringe Latenz
DirectSound• Sampleraten-/Formatkonvertierung
• 3D-Audiofunktionen
– Position und Richtung von Hörer und Schallquellen
• Doppler-Effekt
– Entfernungsabhängige Dämpfung
• HRTF-Funktionen
– Head-Related-Transfer-Functions – Biologisch-physikalischen Eigenschaften des menschlichen
Gehörsystems
DirectMusic• Klangerzeugung über Softwaresynthesizer
• Ansteuerung externer Synthesizer
• MIDI-Schnittstelle
• DirectMusic Producer– Noten, Akkorde, Phrasierung
DirectMusic• IDirectMusicPerformance Objekt
– Dynamische Steuerung zur Laufzeit
– Musikstücke mit Eigenschaften belegen
• DLS - Downloadable Sounds– Tabelle von Instrumentklänge
– Egal welche HW, immer gleicher Sound
DirectInput• Vier Kategorien von Eingabegeräten
– Standard-System-Tastatur
– Maus-ähnliche Geräte (Maus, Touchpad, Trackball)
– Joysticks
– Force-Feedback-Geräte (Joystick, Gamepad, Lenkrad, VR-Helm,
VR-Anzug)
DirectInput• Datenmodus
– Absolut (üblicherweise für die Achsen von Joysticks) – Relativ (bei unbeschränkten Absolutwerten wie z. B. einer Maus).
• Datenzugriff– Unmittelbar (es wird eine aktuelle Zustandsbeschreibung des Geräts geliefert)
– Gepuffert (Informationen über Änderungen mit Zeitstempel und einem
Zählerwert werden gespeichert) • Datenabfrage
– Polling (die Anwendung kümmert sich selbst durch wiederholtes Abrufen verfügbarer Daten um den Informationsaustausch)
– Event notification (Benachrichtigung über anstehende Daten mittels des Win32-
API)
DirectPlay• Zugriff auf Kommunikationsdienste
– Internet– Modem– Nullmodem
– Lokales Netzwerk (LAN)
• Emulation der vom zugrundeliegenden Netzwerk nicht unterstützten Funktionen
• Dynamische Anpassung der Latenzzeiten und Bandbreite
DirectPlay• Aufbau einer Spielsitzung (Session)
– Erzeugung eines DirectPlay-Objekts
– Ermittlung der Connection Shortcuts
– Auswahl einer bestimmten Verbindung
– Bestimmung der bereits existierenden Communication Sessions – Eintreten in eine bestehende, oder Erzeugung einer neuen Sitzung
• Mit oder ohne Host– Offenen Sitzung
– Password Protected
– Private
DirectPlay• Custom Messages
– Selbstdefinierte Nachrichten
• System Messages– Automatisch generierte Nachrichten
• Datensicherheit– Verschlüsselung
– Signierung
– Garantie (Zertifizierung)
DirectXTransform• Dynamische 2D/3D Grafikeffekte auf Bitmapgrafiken
– Alpha-Blending
– Procedural Surfaces
– Morphing
– Digitale Filter
• Umfangreiche Unterstützung Grafikformate
• Anwendungsbasiert– Webinhalte (HTML)
– Plugins für Photoshop
– Skripte, Attribute
DirectShow• Streaming Media Architecture
• Wiedergabe und Aufnahme von Datenströmen
• Formatkonvertierung– WAV, MP3, MPEG, AVI
• Komprimierung von Audio-/Videodaten
• WDM-Treiber
• Legacy-Treiber
Aussichten• Neue Hardware Funktionen
– VertexShader 2.0, PixelShader 2.0
– Geometrieberechnungen in HW mit TnL
– Kaum Nutzung in Spielen
• DirectX 9.0– Steht in den Startlöchern
– Vereinfachung der "Shader Programmier-Sprache"
Fazit• DirectX bietet einmalige Kombination aus multimedialen
API‘s
• Praktisch kein Konkurrenzprodukt– Wenn dann nur auf einzelnen Gebieten (OpenGL)
– Oder im Professionellem Anwendungsbereich (Studiosoftware)
• Am Anfang sehr umständlich und ad hoc Flickwerk
• Mittlerweile ausgreift und teilweise sehr einfach anzuwenden
• Sehr weit verbreitet– Im Profiebereich als auch im Amateurbereich
– Viele Freeware Module
– Bücher, Tutorials und Informationen im Internet
AUS