DirectX und OpenGL

Transcrição

DirectX und OpenGL
DirectX und OpenGL
Proseminar Multimedia-Hardwareerweiterungen
Michel Weimerskirch, 15. Februar 2006
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
2
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
3
Einleitung
• Vor etwa 20 Jahren: ersten Grafikkarten mit
3D-Unterstützung für den Heimbereich
• Damals: Mangel an einheitlichen APIs
• Heute: DirectX und OpenGL haben hohen
Reifegrad sowie große Verbreitung erreicht
4
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
5
Übersicht: DirectX (1/5)
• Warum?
– Problem:
protected memory model von Windows 95
⇒ kein direkter Zugriff auf die Hardware
– Lösung:
Windows Games SDK (Heute: DirectX)
– Windows musste für Spieleentwicklung
attraktiv gemacht werden
6
Übersicht: DirectX (2/5)
• Aktuelle Version: 9.0c
• Plattformen: Windows und X-Box
⇒ Nur Microsoft
7
Übersicht: DirectX (3/5)
• DirectX Graphics
– Direct3D - 3D-Anwendungen und Spiele
– D3DX utility library - Erleichtert Anw.
• DirectInput - Eingabegeräte
• DirectSound - Audio-Anwendungen
• DirectMusic - Synthetische Musik (z.B. MIDI)
8
Übersicht: DirectX (4/5)
• DirectDraw - bisher für die
zweidimensionale Darstellung verwendet
– Nicht mehr empfohlen
– Zweidimensionale Darstellung wird nun
von Direct3D sowie der D3DX utility library
übernommen
9
Übersicht: DirectX (5/5)
• DirectPlay - bisher zur NetzwerkKommunikation bei Online-Spielen benutzt
– Nicht mehr empfohlen
– Stattdessen: Benutzung von Windows
Sockets sowie den Windows Firewall APIs
• DirectShow - Audio- und Video-Streams
– Von Verwendung in der Spieleentwicklung
wird abgeraten
10
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
11
Übersicht: OpenGL (1/4)
•
•
•
•
OpenGL = Open Graphics Library
Software-Schnittstelle zur Grafik-Hardware
Aktuelle Version: 2.0
Plattformen:
– Microsoft Windows, Linux, MacOS-X und
andere Unix-Derivate
– aber auch: Playstation 3 von Sony
OpenGL ES (Embedded Systems)
12
Übersicht: OpenGL (2/4)
• Mehrere hundert Prozeduren und
Funktionen
• Erste Version: 1. Juli 1992
• OpenGL Architectural Review Board
(ARB) ⇒ von SGI gegründet
• Ursprung von OpenGL: IrisGL
13
Übersicht: OpenGL (3/4)
• Reine Grafik-Schnittstelle
– keine Unterstützung für Eingabegeräte
und andere Ausgabegeräte
• Ersatz für diesen Mangel (Beispiele):
– Simple DirectMedia Layer (SDL)
(www.libsdl.org)
– Open Audio Library (OpenAL)
(www.openal.org)
14
Übersicht: OpenGL (4/4)
• OpenGL Extensions
– Zusätzliche Funktionen
– Eigenständige Erweiterungen ohne neue
Version der API
– Namensgebung strikt
– OpenGL Architectural Review Board (ARB)
15
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
16
OpenGL
• Prozedurale Sprache
• Striktes Schema für Namensgebung
– Befehle: Präfix gl
– Konstanten und Typen: Präfix GL
⇒ Keine Konflikte mit anderen Bibliotheken
⇒ Transparenz für Entwickler
17
Diagramm OpenGL Pipeline
Display
List
Evaluator
Per-Vertex
Operations
Primitive
Assembly
Rasterization
PerFragment
Operations
Framebuffer
Texture
Memory
Pixel
Operations
18
Anwendungsbeispiel OpenGL
glColor3f(0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0, 0.0, 0.0);
glVertex2f( 0.0, 0.75);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(­0.75, ­0.75);
glColor3f(0.0, 0.0, 1.0);
glVertex2f( 0.75, ­0.75);
glEnd();
glFlush();
19
Anwendungsbeispiel OpenGL
glColor3f(0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0, 0.0, 0.0);
glVertex2f( 0.0, 0.75);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(­0.75, ­0.75);
glColor3f(0.0, 0.0, 1.0);
glVertex2f( 0.75, ­0.75);
glEnd();
glFlush();
20
Anwendungsbeispiel OpenGL
glColor3f(0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0, 0.0, 0.0);
glVertex2f( 0.0, 0.75);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(­0.75, ­0.75);
glColor3f(0.0, 0.0, 1.0);
glVertex2f( 0.75, ­0.75);
glEnd();
glFlush();
21
Anwendungsbeispiel OpenGL
glColor3f(0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1.0, 0.0, 0.0);
glVertex2f( 0.0, 0.75);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(­0.75, ­0.75);
glColor3f(0.0, 0.0, 1.0);
glVertex2f( 0.75, ­0.75);
glEnd();
glFlush();
22
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
23
Direct3D
• Befehle werden nicht direkt ausgeführt
• Koordinaten der Eckpunkte (Vertices)
werden im Vertex-Buffer gespeichert
• Die meisten Berechnungen werden erst
ausgeführt wenn sie explizit gefordert
werden.
24
Direct3D
• Funktionen, Macros, Strukturen, Konstanten
und Enumerations haben das Präfix D3D
• Interfaces: Präfix Idirect3D
Gilt analog für andere DirectX-Komponenten
25
Diagramm Direct3D Pipeline
Vertex
Data
Tessellation
Primitive
Data
Vertex
Processing
Geometry
Processing
Pixel
Processing
Pixel
Rendering
Texture
Sampler
Textured
Surface
26
Anwendungsbeispiel Direct3D
1. Vertex-Struktur
2. Flexible Vertex Format (FVF)
struct CUSTOMVERTEX {
FLOAT x, y, z, rhw; // Position der Vertex
DWORD color; // Farbwert
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|
D3DFVF_DIFFUSE)
27
Anwendungsbeispiel Direct3D
3. Array mit den 3 Eckpunkten
CUSTOMVERTEX Vertices[] = {
// x, y, z, rhw, color,
{150.0f, 50.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),},
{250.0f, 250.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(0, 0,255),},
{ 50.0f, 250.0f, 0.0f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),},
};
28
Anwendungsbeispiel Direct3D
4. Buffer erstellen, sperren,
füllen und wieder entsperren
g_pd3dDevice­>CreateVertexBuffer(
3*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL );
VOID* pVertices;
g_pVB­>Lock( 0, sizeof(Vertices), (void**)&pVertices, 0 );
memcpy( pVertices, Vertices, sizeof(Vertices) );
g_pVB­>Unlock();
29
Anwendungsbeispiel Direct3D
5. Hintergrund löschen
(mit Schwarz)
g_pd3dDevice­>Clear( 0, NULL,
D3DCLEAR_TARGET,
D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
30
Anwendungsbeispiel Direct3D
6. BeginScene
7. StreamSource ⇐ Stream “0”
8. SetFVF (wurde vorhin erstellt)
g_pd3dDevice­>BeginScene();
g_pd3dDevice­>SetStreamSource( 0, g_pVB, 0,
sizeof(CUSTOMVERTEX) );
g_pd3dDevice­>SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice­>DrawPrimitive( D3DPT_TRIANGLELIST, 0,1 );
g_pd3dDevice­>EndScene();
g_pd3dDevice­>Present( NULL, NULL, NULL, NULL );
31
Anwendungsbeispiel Direct3D
9. DrawPrimitive: Welche Form?
10. EndScene
11. Present: Ergebnis anzeigen
g_pd3dDevice­>BeginScene();
g_pd3dDevice­>SetStreamSource( 0, g_pVB, 0,
sizeof(CUSTOMVERTEX) );
g_pd3dDevice­>SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice­>DrawPrimitive( D3DPT_TRIANGLELIST, 0,1 );
g_pd3dDevice­>EndScene();
g_pd3dDevice­>Present( NULL, NULL, NULL, NULL );
32
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
33
OpenGL Utility Toolkit (GLUT)
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(300, 300)
glutCreateWindow("Fenstertitel");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMainLoop();
}
34
DirectX Utility Toolkit (DXUT)
INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT) {
DXUTSetCallbackDeviceCreated( OnCreateDevice );
DXUTSetCallbackDeviceReset( OnResetDevice );
DXUTSetCallbackDeviceLost( OnLostDevice );
DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );
DXUTSetCallbackFrameRender( OnFrameRender );
DXUTSetCallbackFrameMove( OnFrameMove );
DXUTInit( TRUE, TRUE, TRUE );
DXUTCreateWindow( L"BasicHLSL" );
DXUTCreateDevice(D3DADAPTER_DEFAULT, TRUE, 640, 480);
DXUTMainLoop();
return DXUTGetExitCode();
}
35
Inhalt
•
•
•
•
•
•
•
Einleitung
Übersicht DirectX und Komponenten
Übersicht OpenGL
Sprachlicher Aufbau OpenGL
Sprachlicher Aufbau Direct3D
Utility Toolkits
Schlussfolgerung
36
Schlussfolgerung
• Vergleichbarer Funktionsumfang
• Aber: starke Unterschiede in der
sprachlichen Gestaltung
• In Zukunft: weitere Abstraktion und
Vereinfachung der APIs
z.B. durch Shader-Sprachen
37
DirectX und OpenGL
Proseminar Multimedia-Hardwareerweiterungen
Michel Weimerskirch, 15. Februar 2006
Diskussionsfrage
Microsoft hat mit seiner Windows-Plattform
eine Monopol-Stellung auf dem PC-SpieleMarkt. Inwiefern beinflusst das die
Entscheidung der Spiele-Entwickler ob sie
nun DirectX oder OpenGL für ihre Projekte
wählen sollen?
39

Documentos relacionados