1 / 31

Grundbegriffe der  3D-Spiele-Programmierung nach David Scherfgen

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.

mizell
Download Presentation

Grundbegriffe der  3D-Spiele-Programmierung nach David Scherfgen

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Schriftformate -  Letter Gothic  für Listings (Quellcode, Variablen etc.) - Kapitälchen für Datei- und Ordnernamen - Tastaturangaben in eckigen Klammern [ ]

  3. Ungarische Notation

  4. Ungarische Notation

  5. Ungarische Notation

  6. Ungarische Notation

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

  8. Aktionen des Spiels RENDER-FUNKTION Spielstatus (beinhaltet  Levels, Figuren, Grafiken)  wird gezeichnet (gerendert) MOVE-FUNKTION Reaktion auf Tastendruck  vom User ->  Bewegung, Aktion

  9. Nachrichtenschleife

  10. 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)

  11. Die Lösung des Zeitproblems

  12. Spielabschnitte Unterschiedliche Spielabschnitte werden mit einzelnen Funktionen abgehandelt Die Variable GameState gibt den anktuellen Status (Abschnitt) durch eine Aufzählung (enum) an

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

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

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

  16. 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)

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

  18. 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!

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

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

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

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

  23. Speichermanager Die Funktionen in angewendeter Form:

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

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

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

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

  28. Nachrichtenschleife der Engine tbDoMessageLoop - arbeitet mit Funktionszeigern - kann als Parameter Funktionen übergeben, die dann aufgerufen werdern 

  29. Bei Fragen... www.spieleprogrammierer.de - FAQ - Forum - Kapitel 10

  30. 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:

  31. 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)

More Related