Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss.
-
Upload
baldawin-henschen -
Category
Documents
-
view
217 -
download
1
Transcript of Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen Natalie Weiss.
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 [ ]
Ungarische Notation
Ungarische Notation
Ungarische Notation
Ungarische Notation
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
Aktionen des Spiels
RENDER-FUNKTION Spielstatus (beinhaltet Levels, Figuren, Grafiken) wird gezeichnet (gerendert)
MOVE-FUNKTION
Reaktion auf Tastendruck vom User -> Bewegung, Aktion
Nachrichtenschleife
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)
Die Lösung des Zeitproblems
Spielabschnitte
Unterschiedliche Spielabschnitte werden mit einzelnen Funktionen abgehandelt
Die Variable GameState gibt den anktuellen Status (Abschnitt) durch eine Aufzählung (enum) an
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
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
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
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)
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
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!
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
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.
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
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
SpeichermanagerDie Funktionen in angewendeter Form:
Virtuelle DateientbVFileMöglichkeiten: Aus echter Datei (bzw Zip-Datei), aus Speicherbereich mit bekannter Größe oder aus Windows-Ressourcen
Es wird kopiertgelöscht werden
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
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
HilfsmakrosSicherheitsmakros:- sicheres Löschen v. Arrays- sicheres Löschen v. Speicherbereich- Freigabe von Schnittstellen
Fehlermakros:- diese Makrso schreiben bessere Infos in die Logbuchdatei
Nachrichtenschleife der EnginetbDoMessageLoop
- arbeitet mit Funktionszeigern- kann als Parameter Funktionen übergeben, die dann aufgerufen werdern
Bei Fragen...
www.spieleprogrammierer.de
- FAQ - Forum - Kapitel 10
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:
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)