22
Präsentation der Diplomarbeit: „Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D“ Fachhochschule Amberg-Weiden Fachbereich Elektro- und Informationstechnik von Stefan Bartmann Studiengang Elektrotechnik, Studienschwerpunkt Multimediatechnik Datum: 27. 01.2003

Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Embed Size (px)

Citation preview

Page 1: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Präsentation der Diplomarbeit:

„Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache

C++ unter Verwendung von Direct3D“

Fachhochschule Amberg-WeidenFachbereich Elektro- und Informationstechnik

von Stefan BartmannStudiengang Elektrotechnik,

Studienschwerpunkt Multimediatechnik

Datum: 27. 01.2003

Page 2: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

2

Vortragsinhalt

→ Klärung der Aufgabenstellung

Funktionsweise von Direct3D

Bestandteile des Funktionszeichenprogrammes

Demonstration des Funktionszeichenprogrammes

Zusammenfassung

Page 3: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

3

Klärung der Aufgabenstellung

1. Welche Art von Funktionszeichenprogramm ist zu erstellen?

2. Wieso eignet sich Direct3D für die Umsetzung eines 3D-Funktionszeichenprogramms?

3. Warum soll die Programmiersprache C++ verwendet werden?

Page 4: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Klärung der Aufgabenstellung 4

• Funktionen der Form z = f(x,y) als Fläche im Raum darstellen

• Angabe eines Zeitparameters in der Funktionsgleichung möglich

• Interaktivität in Echtzeit während der Darstellung möglich

• Skalierbarkeit

=>Motivation: „Erfahren“ von Funktionen soll interaktiv möglich sein, um ein Verständnis für die Funktionsgleichung zu entwickeln

Welche Art von Funktionszeichenprogramm ist zu erstellen?

Page 5: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Klärung der Aufgabenstellung 5

• DirectX kapselt den direkten Zugriff auf Computerhardware• Direct3D ist Teil von DirectX und bietet Schnittstellen für

die Ausgabe von 3D-Grafik an• flexibel zu handhaben• Ausnutzung der Rechenkapazität von

Grafikbeschleunigungskarten

=> Ausführungsgeschwindigkeit

Voraussetzung: Es muss eine Grafikkarte vorhanden sein, welche Hardwareunterstützung beim Zeichnen bietet!

Wieso eignet sich Direct3D für die Umsetzung eines 3D-Funktionszeichenprogramms?

Page 6: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Klärung der Aufgabenstellung 6

• schnell• flexibel

Warum soll die Programmiersprache C++ verwendet werden?

Page 7: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

7

Vortragsinhalt

Klärung der Aufgabenstellung

→ Funktionsweise von Direct3D

Bestandteile des Funktionszeichenprogrammes

Demonstration des Funktionszeichenprogrammes

Zusammenfassung

Page 8: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

8

Auf folgende Aspekte soll im Anschluss eingegangen werden:

1. Im Gesamtzusammenhang auftretende Vorgänge beim Zeichnen mit Direct3D

2. Zusammenspiel von Direct3D mit einem Win32-Programm

3. Die Organisation der zu zeichnenden Daten

4. Umrechnung des 3D-Modelles in 2D-Bildschirmkoordinaten

Funktionsweise von Direct3D

Page 9: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Funktionsweise von Direct3D 9

Win32-Anwendung

Direct3D

Grafikkartentreiber

Grafikkarte

Monitor

HAL

Im Gesamtzusammenhang auftretende Vorgänge beim Zeichnen mit Direct3D

Hardware Abstractive Layer

Page 10: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Funktionsweise von Direct3D 10

• Verständigung zwischen einer Win32-Anwendung und DirectX wird über die COM-Schnittstelle abgewickelt

Schritte, welche in einem Win32-Programm durchgeführt werden müssen, um mittels Direct3D zu zeichnen:

1. Erzeugen eines Fensters für die Ausgabe

2. Direct3D mitteilen, welches Fenster für die Ausgabe verwendet werden soll

3. Auswählen eines Adapters, über welchen die Grafikausgabe stattfinden soll

4. Direct3D mitteilen, welcher Adapter für die Grafikausgabe gewählt wurde

5. Zeichenbefehle an Direct3D übermitteln

Zusammenspiel von Direct3D mit einem Win32-Programm

Page 11: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Funktionsweise von Direct3D 11

• Direct3D mittels des FVF (Flexible Vertex Format) mitteilen, welche Komponenten die zu zeichnenden Vertices enthalten sollenBeispielsweise:

– Position

– Normalenvektor

– Farbkomponenten

– …

• Erzeugen von „Vertexpuffern“ für die Ablage der Vertices

Die Organisation der zu zeichnenden Daten

Page 12: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Funktionsweise von Direct3D 12

• Beispiel: Jeweils drei im Vertexpuffer abgelegte Vertices werden für das Zeichnen eines Dreieckes herangezogen

Die Organisation der zu zeichnenden Daten

V e rte x p u ffe r

V e rtic e s

D re ie c k

Page 13: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Funktionsweise von Direct3D 13

• Vertices liegen als dreidimensionale Punkte im Vertexpuffer vor, die Ausgabeoberfläche ist aber zweidimensional

• Die Betrachtungsrichtung und die Position der Kamera sollen beliebig sein

=>es sind Transformationen erforderlich, welche durch Matrizen repräsentiert werden– Matrix für Kameratransformation enthält Translation und Rotation

– Matrix für Projektionstransformation, welche perspektivische Abbildung von 3D nach 2D leistet

• Transformierungen werden von D3D berechnet, wenn dies die Grafikkarte nicht beherrscht

Umrechnung des 3D-Modelles in 2D-Bildschirmkoordinaten

Page 14: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

14

Vortragsinhalt

Klärung der Aufgabenstellung

Funktionsweise von Direct3D

→Bestandteile des Funktionszeichenprogrammes

Demonstration des Funktionszeichenprogrammes

Zusammenfassung

Page 15: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

15

• Ablaufstruktur• Funktionsparser• Textausgabe in das Zeichenfenster• Koordinatenkreuz• Benutzerinterface beinhaltet Eingaben über

– Tastatur während der Darstellung der Funktion

– Menü

– Dialoge

• Logik zur Verwaltung und Berechnung der Funktionsdaten

Bestandteile des Funktionszeichenprogrammes

Page 16: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Bestandteile des Funktionszeichenprogrammes

16

Anwe ndungfo r ts e tze n?

ve rarbe iteW indo ws-M e ldunge n

ve rarbe iteB e nutze re ingabe n

führeAktualis ie runge n de r

O bje kte durc h

Ze ic he nvo rgang

Sync hro nisatio n

Initialis ie rung

ja

n e i n

Anwe ndunghe runte rfahre n

Ablaufstruktur

Page 17: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Bestandteile des Funktionszeichenprogrammes

17

Funktionsparser

• Übernommen und Angepasst an eigene Bedürfnisse• Wiederholtes Berechnen kann beschleunigt ausgeführt

werden• Unterstützte Operaden:

+ - * / ^

• Unterstützte Funktionen:sin asin cos acos tan atan sqrt log log10

Page 18: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Bestandteile des Funktionszeichenprogrammes

18

• Vertices werden in einem Dreiecksraster vorausberechnet:

Logik zur Verwaltung und Berechnung der Funktionsdaten

X

Y

Page 19: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

Bestandteile des Funktionszeichenprogrammes

19

...

• Zeitparameter: – Für jeden darzustellenden Zeitpunkt muss die Funktion

berechnet werden– Der Vertexpuffer muss für jeden Zeitpunkt neu belegt werden

Ze itp u n k t 1

Logik zur Verwaltung und Berechnung der Funktionsdaten

Ze itp u n k t 2 Ze itp u n k t n

Page 20: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

20

Vortragsinhalt

Klärung der Aufgabenstellung

Funktionsweise von Direct3D

Bestandteile des Funktionszeichenprogrammes

→ Demonstration des Funktionszeichenprogrammes

Zusammenfassung

Page 21: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

21

Vortragsinhalt

Klärung der Aufgabenstellung

Funktionsweise von Direct3D

Bestandteile des Funktionszeichenprogrammes

Demonstration des Funktionszeichenprogrammes

→ Zusammenfassung

Page 22: Präsentation der Diplomarbeit: Erstellung eines 3D-Funktions- zeichenprogramms in der Programmiersprache C++ unter Verwendung von Direct3D Fachhochschule

22

• Nutzen des Funktionsplotters• Hilfe fehlt• Mögliche Verbesserungen des

Funktionszeichenprogrammes:– Einsatz von Echtzeitbeleuchtungseffekten– Einbau einer Kollisionsabfrage– Erweiterung der „Autopilot“-Möglichkeiten

Zusammenfassung