34
Grundbegriffe der 3D- Spiele-Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Embed Size (px)

Citation preview

Page 1: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Grundbegriffe der 3D-Spiele-Programmierung

Universität zu KölnHistorisch Kulturwissenschaftliche InformationsverarbeitungWS 11/12Referent: Jens Wangenheim

Page 2: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Gliederung- Die ungarische Notation

- Spiel vs. Programm

- DOS vs. Windows

- Das Problem mit der Zeit

- DirectX und seine Komponenten

- Makros

- COM

- Prüfmakros

- Die Engine

- Logbuchdatei

- Speichermanager

- Virtuelle Dateien

Page 3: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Die ungarische Notation

- Beim Programmieren häufig verwendete Namenskonvention:

class = Präfix C (z.B. class CTree)

struct = Präfix S (z.B. struct SEnemyInfo)

- Durchaus umstritten, wird im Buch bzw. den Beispielen aber verwendet.

Page 4: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Spiel vs. Programm

- Spaß und Langzeitmotivation vs. Übersichtlichkeit und Funktionalität.

- Ein Programm wartet hauptsächlich auf Eingaben.

- Das Spiel ist ständig beschäftigt mit Berechnungen.

Page 5: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DOS vs. Windows

In DOS konnte linear programmiert werden:

Page 6: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DOS vs. Windows

In Windows muss die Nachrichtenschleife durchlaufen werden:

- Nachrichten an alle Fenster einer Anwendung durchlaufen diese Schleife

- Es gibt in der Regel nur eine Nachrichtenschleife

Page 7: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DOS vs. Windows

- Render/Move in Nachrichtenschleife integriert:

Page 8: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Das Problem mit der ZeitBei 233 Mhz: Position.x = 250Bei 600 Mhz: Position.x = 450

- Render- und Move-Funktion werden immer hintereinander aufgerufen!

Page 9: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Das Problem mit der ZeitLösung: timeGetTime(); aus WINMM.LIB- Liefert seit Systemstart vergangene Zeit in Millisekunden

Page 10: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Das Problem mit der Zeit

- Move Funktion hat einen zusätzlichen Parameter bekommen, der das Problem löst:

Page 11: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DirectX und seine Komponenten

- DirectX Graphics

- DirectX Audio

- DirectInput

- DirectPlay

- DirectShow

- DirectSetup

Page 12: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DirecX Graphics

- Im Buch als Direct3D bezeichnet

- Für Darstellung anspruchsvoller 3D Grafik

- Hardware muss 3D Beschleunigung unterstützen

- Bietet auch grundlegende 2D-Funktionen

Page 13: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DirectX Audio

- Sowohl für Soundeffekt als auch Hintergrundmusik zuständig

- Komponenten: DirectSound + DirectMusic

- Auch 3D-Sound und DolbyDigital möglich

- Sprachkommandos / Unterhaltungen

Page 14: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DirectInput

- Zuständig für diverse Eingabegeräte

- Steuert auch ForceFeedback

Page 15: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DirectPlay

- Stellt Multiplayer-Funktion zu Verfügung

- Eingebaute VoiceChat-Funktion

- Unterscheidet nicht zwischen Netzwerk/Internetspiel: komfortabel

Page 16: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

DirectShow

- Spielt Multimedia-Daten ab

- Mittlerweile zwischenzeitlich in Platform SDK integriert

Page 17: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Makros

Unterschied Funktion / Makro:- Makros werden vom Präprozessor ausgewertet

- Funktion wird aufgerufen und ausgeführt

- Ein Makro wird immer wieder neu in den Quelltext kopiert

Vorteil: Makros sind schneller !

Nachteil: Debugging funktioniert nicht !

Eine Folge von Anweisungen und Deklarationen, die unter einer Bezeichnung zusammengefasst werden

Page 18: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Makro erstellen

- Es gibt vorgefertigte Systemmakros

- Man kann Makros auch selber erstellen:

Später mehr zu Makros…

Page 19: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

COM

= Component Objekt Model

- Von Microsoft entwickeltes Plattformmodell- Eignet sich zur übersichtlichen Organisation von

großen Funktionsmengen- DirectX baut auf dem COM Modell auf- Plattform-, versions- und sprachunabhängig

Page 20: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

COM / Schnittstellen

- Fordert die Aufteilung in Schnittstellen (Interfaces)

- Interface wird durch eine Funktion erzeugt- Interface besitzt Referenzzähler- Zähler muss auf 0 stehen im Interface zu

löschen

Page 21: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

IUnknown

- Basisschnittstelle, stellt die zur Verwaltung notwendigen 3 Methoden zur Verfügung:

AddRef: Referenzzähler um 1 erhöhen

Release: Schnittstelle freigeben, Referenzzähler um 1 verringern und Abbau der Schnittstelle beim Wert 0

QueryInterface: Anfordern eines anderen Schnittstellentyps

- Einmalige ID für jeden Schnittstelle: IID_ als Präfix

Page 22: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Prüfmakros / Rückgabewerte

- Fast alle Methoden von COM Schnittstellen sind vom Typ HRESULT

- Liefern einen Prüfwert zurück, mit dem sich das Ergebnis der Methode feststellen lässt:

- Begegnet uns in sehr ähnlicher Form bei der Engine wieder

Page 23: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Die Engine

- Der sprichwörtliche Motor eines Spiels

- Automatisiert Programmabläufe

Spezialisierte Engine: Auf bestimmte Spiele spezialisiert bzw optimiert (zB Egoshooter)

Universelle Engine: Kann theoretisch alles. Eher Hilfestellungen als konkrete Lösungen.

Page 24: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Die Verpackung Engine

- „Verpackung“ = Art der Präsentation der Funktionen und Klassen.

- Statische Engine: Alle Funktionen in einer statischen LIB Datei

- Dynamische Engine: Alles landet in einer dynamischen DLL (Dynamic Link Library)

Page 25: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Was sollte die Engine können?

- schnelle, optimierte Klasse, für Vektoren, Matrizen, Ebenen und Farben

- Funktionen zum Laden einer Textur- Einfache/schnelle Darstellung von 3D Objekten- Komplexe Effekte darstellen (Wasser, Feuer, Nebel usw)- Textausgabe- Einfacher Zugriff auf Eingabegeräte- Einfaches Abspielen von Multimediadaten- Laden von Dateien aus größeren Datenpaketen- Diverse Helferfunktionen- Speichermanagement

Page 26: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Namensgebung

- Alle öffentlichen Funktionen, Strukturen, Klassen bekommen das Präfix tb (tbInit, tbDoMessageLoop)

- Variablen bekommen das Präfig tb_g_

- Mit #define definierte Makros bekommen das Präfix TB_

Page 27: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Rückgabewerte

Wie bringt man Funktionen dazu Daten zurück zu liefern?

1. Auf Prüfmakros verzichten und Daten direkt zurückliefern?

2. Statusrückgabewert beibehalten und als Parameter einen Zeiger auf einen Speicherbereich (mit den gewünschten Daten) zurückgeben lassen?

3. Mal so (1.), mal so (2.)!

- Widerspricht der angestrebten Einheitlichkeit, ist aber die beste Lösung.

Page 28: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Projekt einrichten / Engine kompilieren

- http://www.hki.uni-koeln.de/node/11329 besucht?- DirectX SDK installiert?

- Updatepaket heruntergeladen und entpackt?- Beigefügte Anleitung durchgegangen? - Gab es Probleme beim Kompilieren oder Konfigurieren?

Inkl. Download & Installation ca. 60 min. Arbeitsaufwand!

- http://www.hki.uni-koeln.de/node/11329 besucht?- DirectX SDK installiert?

- Updatepaket heruntergeladen und entpackt?- Beigefügte Anleitung durchgegangen? - Gab es Probleme beim Kompilieren oder Konfigurieren?

Inkl. Download & Installation ca. 60 min. Arbeitsaufwand!

Page 29: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

TriBase Engine

Page 30: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Logbuchfunktion

- Die Funktion tbWriteToLog ist mit printf oder sprintf vergleichbar.

- Erwartet Formatstring sowie Platzhalter „%...“- %f für float-Wert, %s für einen String usw.- TriBase-Logbuch unterstützt sogar HTML- Aufruf tbInit() setzt Logbuchdatei automatisch

zurück

Page 31: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Speichermanager

- TriBase Engine besitzt Speichermanager:

- Speicher reservieren tbMemAlloc();- Speicherbereiche verändern tbMemReAlloc();- Freigabe von Speicher tbMemFree();- Speicherbereiche abfragen tbMemGetSize();

Page 32: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Virtuelle Dateien= Speicherbereich der wie eine Datei

behandelt wird

Durch Klasse tbVFile repräsentiert:- Aus echter Datei erzeugen- Aus Speicherbereich mit bekannter Größe erzeugen- Aus Windows Ressource erzeugen

Wozu?- Verallgemeinerung von Funktionen

Page 33: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Hilfsmakros

- Um Abstürze und Fehlermeldungen zu vermeiden

- Um nicht jedes mal wieder Prüfen zu müssen ob z.B. Interface = NULL ist

Page 34: Grundbegriffe der 3D-Spiele- Programmierung Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 11/12 Referent: Jens Wangenheim

Fehlermakros

- TriBase Engine besitzt vordefinierte Fehelrmakros

- Wandeln DirectX Fehlercodes in lesbaren Text um

- Einfache Fehlersuche durch Angaben von fehlerhafter Codezeile und Funktionen im Logbuch