grundbegriffe der 3d-spiele-programmierung nach david scherfgen natalie weiss

31
Grundbegriffe der 3D-Spiele- Programmierung nach David Scherfgen Natalie Weiss

Upload: baldawin-henschen

Post on 06-Apr-2016

217 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Grundbegriffe der 3D-Spiele-Programmierung

nach David Scherfgen

 Natalie Weiss

Page 2: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Schriftformate

 -  Letter Gothic  für Listings (Quellcode, Variablen etc.)

- Kapitälchen für Datei- und Ordnernamen  - Tastaturangaben in eckigen Klammern [ ]

Page 3: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Ungarische Notation

 

Page 4: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Ungarische Notation

 

Page 5: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Ungarische Notation

 

Page 6: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Ungarische Notation

 

Page 7: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Unterschiede zwischen Spiel und Anwendung    SPIEL                                         ANWENDUNG 

    SPASS                                       EFFEKTIVITÄT muss daher:                                      muss daher:  anschaulich sein,                          leicht nutzbar sein  guten Sound und gute Grafik besitzen         RUHT NIE                                   WARTET & REAGIERT                   

Page 8: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Aktionen des Spiels

RENDER-FUNKTION Spielstatus (beinhaltet Levels, Figuren, Grafiken) wird gezeichnet (gerendert)

MOVE-FUNKTION

Reaktion auf Tastendruck vom User -> Bewegung, Aktion

Page 9: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Nachrichtenschleife

 

Page 10: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Das Zeitproblem

Das ist es:

Wenn keine Rücksicht auf die Schnelligkeit einzelner Rechner genommen wird, so funktioniert ein Spiel auf unterschiedlichen Rechnern mit verschiedener Geschwindigkeit

So wird es gelöst:

Benötigte Zeit von Render- und Movefunktion stoppen und darauf vorsetzen  (mit Hilfe von timeGetTime)

Page 11: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Die Lösung des Zeitproblems

Page 12: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Spielabschnitte

Unterschiedliche Spielabschnitte werden mit einzelnen Funktionen abgehandelt

Die Variable GameState gibt den anktuellen Status (Abschnitt) durch eine Aufzählung (enum) an

Page 13: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

DirectXBietet mehr als OpenGL und zwar neben der Grafik auch 3D-Grafik, Ansteuerung von Eingabegeräten, Hardwarebeschleunigung etc. Komponenten:- DirectX Graphics - DirectXAudio- DirectInput- DirectPlay- DirectShow- DirectSetup Warum C++? Wegen des Speicherzugriffs und durch objektorientiertes Programmieren passend für Objekte der Spielewelt

Page 14: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

DirectX-SDK

Das Software Development Kit ist Vermittler zwischen der Programmiersprache (in unserem Falle C++ ) und DirectX

Wir müssen einen Header includen, genau wie eine Library-Datei

DirectX-SDK installieren + Erweiterung für Visual Studio

Alte Lib-Dateien oder Header ersetzen (siehe letzte Stunde)

SDK-PLatform mit DirectShow runterladen- und zwar hier

Page 15: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Das COMOrganisation der Funktion muss gut durchgeplant sein, da die Funktionsbibliothek unglaublich groß ist

COM- das Component Object Model- vereinfacht Übersichtlichkeit großer Funktionsmengen

Interfaces (Schnittstellen) in COM decken bestimmte Aufgabenbereiche ab und sind wie Funktionen in C++, enthalten aber nur Methoden, keine Variablen (Es gibt immer die Schnittstelle- Bsp. IDirect3D-und den Pointer auf die Schnittstelle -Bsp. PDirect3D) Wird durch eine Funktion, keinen Konstruktor erstellt

Page 16: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Schnittstellen

Referenzzähler verhindert das Löschen während ein anderer Programmteil ebenfalls auf das Interface zugreift

IUnknown,  so heisst die Basisschnittstelle mit folgenden Verwaltungsmethoden (von der alle Schnittstellen abgeleitet werden- wie bei der Vererbung):

- AddRef - erhöht den Referenzzähler- Release - Freigabe (Verringern des Ref-Z.s, bei 0 Abbau )- QueryInterface - Anfordern eines Schnittstellentyps

Einmalige Schnittstellen-IDs (IID_ vor den Namen)

Page 17: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Engine bauen

In unserem Falle wird eine universelle, dynamische Engine erstellt. Diese ist auf viele Spiele anwendbar und nutzt eine Dynamic Link Library -> bei einer fehlerhaften Engine muss nur die DLL-Datei ge-updated werden. für:

- schnelle optimierte Klassen- Ladefunktion von 3D-Objekten- Effekte- Speichermanagement- Zugriff auf Tastatur, Maus etc- Laden von Zip-Files

Page 18: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Einheitliche Namensgebung

TriBase

Namen von öffentlichen Funktionen, Klassen, Strukturen: tb (gefolgt von dem Namen)

- Globale Variablen: tb_g_ (gefolgt von dem Namen)

- Definierte Makros:  TB_ (Name komplett in Großbuchstaben)

- Enum-Elemente: TB_ (plus Abkürzung des Namens)

- Generell: Mit tbInit und tbExit initialisieren und herunterfahren!

Page 19: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Rückgabewerte

tbResult

Der einzige Code für eine erfolgreiche Methode/Funktion istTB_OK = 0

Wird für Funktionen mit mehreren Fehlerquellen genutzt, ansonsten wird eine direkte Übergabe durch einen Rückgabewert geschaltet

Page 20: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Logbuch-Funktion

Log.Html durch tbWriteToLog (im Hauptverzeichnis des Programmes) werden hier während der Ausführung wichtige Informationen hineingeschrieben. Bei exit wird die Datei zurückgesetzt.

Page 21: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

DateiaufteilungDie Engine besteht aus Tribase.dll und der dazugehörigen Bibliotheksdatei (Tribase.lib), diese Daten müssen mit dem Spiel immer mitgeliefert werden. RELEASE-VERSION

Nur für die Entstehungsphase sollte zusätzlich eine DEBUG-VERSION erstellt werden: TribaseD.dll und TribaseD.lib

Page 22: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Speichermanager

tbExit räumt Speicherbereiche auf, welche vom Manager gelistet wurden (doppelt verkettete Liste)

 Großen Speicherplatz sichern:

- tbMemAlloc - Int-Wert mit Größe angeben, gibt Zeiger zurück - tbReAlloc- Parameter der alten Adresse und neue Bedarfsgröße

- tbMemFree - Freigabe, Zeiger übergeben 

- tbMemGetSize - wie groß? Zeiger übergeben, Int-Wert zurück

- tbMemIsValid - wurde reserviert? Bool zurück

Page 23: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

SpeichermanagerDie Funktionen in angewendeter Form:

Page 24: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Virtuelle DateientbVFileMöglichkeiten: Aus echter Datei (bzw Zip-Datei), aus Speicherbereich mit bekannter Größe oder aus Windows-Ressourcen       

Es wird kopiertgelöscht werden

Page 25: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Methoden

tbVFile::Read               Kopiert in einen Puffer tbVFile::Seek               Um unwichtige Parts zu überspringen

tbVFile::SaveToFile     Wird in echte Datei gespeichert  Zufallszahlen: tbFloatRandom, tbIntRandom jeweils untere und obere Grenze angeben und es wird ein Zufallswert (float oder int) ausgegeben

Page 26: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Abfragemethoden

 Methode                                           liefert  tbVFile::GetBuffer                Zeiger auf d. Speicherbereich tbVFile::GetSize                  Die Größe der virtuellen DateitbVFile::GetCursor              Die Position des Lesezeigers  tbVFile::IsEOF                    TRUE am Ende, sonst FALSE

Page 27: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

HilfsmakrosSicherheitsmakros:- sicheres Löschen v. Arrays- sicheres Löschen v. Speicherbereich- Freigabe von Schnittstellen

Fehlermakros:- diese Makrso schreiben bessere Infos in die Logbuchdatei

Page 28: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Nachrichtenschleife der EnginetbDoMessageLoop

- arbeitet mit Funktionszeigern- kann als Parameter Funktionen übergeben, die dann aufgerufen werdern 

Page 29: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Bei Fragen...

 www.spieleprogrammierer.de

- FAQ - Forum - Kapitel 10

Page 30: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Wiederholung: Datei erstellen- Daten der CD in einen Ordner kopieren- Den Schreibschutz aller Dateien entfernen- TriBase.H includen: EXTRAS - OPTIONEN - PROEKTE - VC++-VERZEICHNIS -RECHTS OBEN INCLUDE-DATEIEN WÄHLEN - AUF GLÄNZENDEN ORDNER - ERSETZEN DURCH:  

 Und die BIBLIOTHEKSDATEIEN erweitern um:

Page 31: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss

Wiederholung: Datei erstellenVisual C++ Projekt einrichten:

LEERES PROJEKT - WIN-32-ANWENDUNG - (PROJEKTÜBERSICHT MARKIEREN) - PROJEKT - EIGENSCHAFTEN - LINKER - EINGABE - ZUSÄTZLICHE ABHÄNGIGKEITEN - IM DIALOGFELD RELEASE WÄHLEN - Tribase.lib EINTRAGEN

IM DIALOGFELD BEI DEBUG FOLGENDES EINGEBENTribaseD.lib

(Alle Projektdateien sind im Ordner Projekte.sln , die Versionen für 2005 sind dementsprechend markiert)