720 likes | 829 Views
DirectX. Großes Seminar von 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
E N D
DirectX Großes Seminar von 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 • 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