Grundbegriffe der 3D-Spiele-Programmierung nach David Scherfgen

Slides:



Advertisements
Ähnliche Präsentationen
Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
Advertisements

PC-Senioren Ludwigsburg
1. 2 Heute entwickeln wir eine kleine DirectInput-Bibliothek,auf die wir bei unseren zukünftigen Projekten immer wieder zurückgreifen werden. Die Themen.
IrfanView starten Doppelklick Es erscheint dieses Fenster.
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Java: Dynamische Datentypen
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Sprache
Colibi Bibliothekssystem der Computerlinguistik. Einführung Motivation Was braucht Colibi? Software Datenbankdesign.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Konstruktoren.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
XINDICE The Apache XML Project Name: Jacqueline Langhorst
Grundbegriffe der 3D-Spiele-Programmierung
Windows Explorer.
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Methoden sind mit einem Namen versehene Programmabschnitte besitzen Rückgabetyp, Namen, Parameterliste.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Einführung in Visual C++
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
14StrukturKlasse1 Von der Struktur zur Klasse von C zu C++ Von Jens Hoffmann
DVG Klassen und Objekte
Bidirektionales VFX-XML-Interface für Daten-Import/Export Visual Extend Anwendertreffen 2009 Rainer Becker, Frank Kropp deutschsprachige FoxPro User Group.
Wizards & Builders GmbH Schulung Visual SourceSafe für Visual FoxPro Norbert Abb W&B.
FH-Hof HTML - Einführung Richard Göbel. FH-Hof Komponenten des World Wide Webs WWW Browser HyperText Transfer Protocol (HTTP) via Internet WWW Server.
Plattformunabhängige Programmiersprache
University of Applied Sciences Übung Objektorientierte Programmierung II Dipl.-Inf. (FH) Markus Vogler.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Dateien auf dem Desktop erstellen
Excel 97 Einführung - Start -.
Game Development mit LUA Integration und Kommunikation von LUA mit C++ Referat von Paul van Hemmen Seminar: Reusable Content in 3D und Simulationssystemen.
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Datenbanken Dantenbanksystem Data Base System Datenbasis (Daten)
CGI (Common Gateway Interface)
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Dynamische Datentypen
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
PHP Basic.
Programmierung 1. Einführung Seite 1
Oliver Spritzendorfer Thomas Fekete
Hilfe Dokumente.
Herbers Excel-Server - der Workshop
EPROG Tutorium #4 Philipp Effenberger
Erste Schritte in DELPHI
Kommandozeile und Batch-Dateien Molekulare Phylogenetik – Praktikum
Anna Steinke‌ WG13 ‌‌‌ Köln, Wie sichere ich meine Daten? Wie mache ich meinen PC sicher?
Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung WS 2013/14.
Typo 3 // Templa Voila * Was? * Warum? * Wie? - Praktische Übung.
Rechtevergabe bei Windows 2000 Server Planung und Ausführung Schäffler und Lindauer.
Programmierung mit ArcObjects Frank Münster Proseminar Geoinformation II.
Programmieren mit Variablen
Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.
Dynamisches Array als "verkettete Liste". Ein Vergleich.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Einführung. Ziel der Veranstaltung  Vermittlung von Grundkenntnissen in C++  Solide Basis für anschließende Weiterentwicklung  Fähigkeit, kleine Programme.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Konstruktoren.
 Präsentation transkript:

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   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

DirectX Bietet 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 COM Organisation 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 ist TB_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.

Dateiaufteilung Die 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

Speichermanager Die Funktionen in angewendeter Form:

Virtuelle Dateien tbVFile Mö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 Datei tbVFile::GetCursor              Die Position des Lesezeigers tbVFile::IsEOF                    TRUE am Ende, sonst FALSE

Hilfsmakros Sicherheitsmakros: - sicheres Löschen v. Arrays - sicheres Löschen v. Speicherbereich - Freigabe von Schnittstellen Fehlermakros: - diese Makrso schreiben bessere Infos in die Logbuchdatei

Nachrichtenschleife der Engine tbDoMessageLoop - 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 erstellen Visual 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 EINGEBEN TribaseD.lib (Alle Projektdateien sind im Ordner Projekte.sln , die Versionen für 2005 sind dementsprechend markiert)