grundbegriffe der 3d-spiele-programmierung nach david scherfgen natalie weiss
TRANSCRIPT
![Page 1: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/1.jpg)
Grundbegriffe der 3D-Spiele-Programmierung
nach David Scherfgen
Natalie Weiss
![Page 2: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/2.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/3.jpg)
Ungarische Notation
![Page 4: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/4.jpg)
Ungarische Notation
![Page 5: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/5.jpg)
Ungarische Notation
![Page 6: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/6.jpg)
Ungarische Notation
![Page 7: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/7.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/8.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/9.jpg)
Nachrichtenschleife
![Page 10: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/10.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/11.jpg)
Die Lösung des Zeitproblems
![Page 12: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/12.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/13.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/14.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/15.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/16.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/17.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/18.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/19.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/20.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/21.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/22.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/23.jpg)
SpeichermanagerDie Funktionen in angewendeter Form:
![Page 24: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/24.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/25.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/26.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/27.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/28.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/29.jpg)
Bei Fragen...
www.spieleprogrammierer.de
- FAQ - Forum - Kapitel 10
![Page 30: Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/30.jpg)
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](https://reader034.vdokument.com/reader034/viewer/2022052605/570491bf1a28ab14218d833c/html5/thumbnails/31.jpg)
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)