Loops Jason Gregory : Game Engine Architecture Tobias Kemper Softwaretechnologie II (Teil 2) HKI Uni Köln SS 2013.

Slides:



Advertisements
Ähnliche Präsentationen
Dynamische WEB-Applikationen
Advertisements

Animation I Referat von Maximilian Humpert
Automated IT Change Planning
ALP II: Objektorientierte Programmierung Sommersemester 2006
Collision Detection in Java3D Hristo Matev WS 02/03.
Klassen - Verkettete Liste -
Operating Systems Principles
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
1 Sascha Michael Competence Manager Integration Umsetzung einer SOA-basierten Retail Plattform.
PC-Cluster.
6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++
Vorlesung Echtzeitbetriebssysteme VI. Posix Übung
Informatik 12, TU Dortmund
Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2009/01/17 Graphics:
Programmierkurs Java WS 98/99 Vorlesung 15 Dietrich Boles 17/02/99Seite 1 Programmierkurs Java Vorlesung im WS 1998/1999 am FB Informatik der Universität.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
Verteilte Software - Java - Prozedurale Programmierung 1
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Dipl. Inf. (FH) Paul Mizel Compilerbau.NET Compiler / Codegeneratoren / Skriptsprachen.
Binäre Bäume Richard Göbel.
FH-Hof Animation - Teil 1 Richard Göbel. FH-Hof Themen Darstellung der Geometrie ändern (Transformation, Appearance, etc.) Geometrie ändern (Morphing)
AUFGABE 1: Ein Wagen (dargestellt durch ein Rechteck) soll sich von links nach rechts bewegen. Tipp: Timer benutzen AUFGABE 2: Zusätzlich zu Aufgabe.
V09 Fallende Formen, Geschwindigkeitsregelung und Timing Daniel Ebner Spieleprogrammierung mit DirectX und C++
Vers. 6: Der Konfigurationsdialog Quelle: Spieleprogrammierung mit DirectX und C++, U. Kaiser und P. Lensing, Galileo Computing (2007)
Dynamische Webseiten Java servlets.
Objektorientierte Programmierung JDK-Klassenbibliothek
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Optimierungstechniken für SMP- Architekturen.
Operating Systems Principles
Oracle interMedia Audio Vortrag für das Seminar Oracle Zusatzoptionen Chris Haußmann.
F açade P attern By Nicolas Lanquetin. Façade Pattern Structural Pattern Bietet ein gemeinsames Interface, anstatt vieler Interfaces eines Subsystems.
Modulare Programmierung
FH-Hof Sortieren mit Binären Bäumen Richard Göbel.
Seminar Telematiksysteme für Fernwartung und Ferndiagnose Basic Concepts in Control Theory MSc. Lei Ma 22 April, 2004.
Einfach verkettete Listen
INSTITUT FÜR DATENTECHNIK UND KOMMUNIKATIONS- NETZE 1 Steffen Stein, TU Braunschweig, 2009 A Timing-Aware Update Mechanism for Networked Real-Time Systems.
| AVS / Programmierung Kapitel 1: Programmierung Einführung Motivation – Entwicklung verteilter Anwendungen im Internet Welchen Dienst soll die Anwendung.
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
Java Performance Tuning Performance Tuning is similar to playing a strategy game but happily you usually get paid for it.
BAS5SE | Fachhochschule Hagenberg | Daniel Khan | S SPR5 MVC Plugin Development SPR6P.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
UNIVERSITÄT ZU KÖLN HISTORISCH-KULTURWISSENSCHAFTLICHE INFORMATIONSVERARBEITUNG REUSABLE - CONTENT SS 2013 MARIA WAGNER ReST.
Gameplay Systems I Softwaretechnologie II (Teil 2): Simulation und 3D Programmierung SS 2012 Prof. Dr. phil. Manfred Thaller Referent: Christian Weitz.
Chair of Informatics III: Database Systems Multi-Core-Algorithmik für Datenbankanwendungen Alfons Kemper, Thomas Neumann, Florian Funke, Henrik Mühe,
Swiss TechNet Events Herzlich Willkommen Windows 8.1 Überblick & moderne Workplace Szenarien 25. November 2013 Martin Weber, Tech Solutions Professional,
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.
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Parallel Programming Proofs ( yay !)
Parallel Programming ( J ) CSP
Heute hier morgen dort, bin kaum da
Abteilung für Telekooperation Übung Softwareentwicklung 2 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
XML IV: Cocoon 2.
Algorithmen und Datenstrukturen Übungsmodul 6
Real Time Operating System
MMIX-Edit Felix Albrecht.
Travelling Salesman Problem (TSP)
By: Jade Bowerman. German numbers are quite a bit like our own. You start with one through ten and then you add 20, 30, 40 or 50 to them. For time you.
Learning By Doing Ereignissteuerung (Events) prozedural ereignisgesteuert Unterprogrammaufruf an fest codierter Stelle Wann immer der Event auftritt, führe.
1 1 Panda Managed Office Protection Switch from Antivirus to Security as a Service Sales training presentation.
Lind 02/2005 Einführung in JAVA. Lind 02/2005 Beispiel: Mittelwert Es soll ein Programm erstellt werden, das den Mittelwert zweier reeller Zahlen berechnet.
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
Beispielanwendung von Java Threads
Data Mining Spectral Clustering Junli Zhu SS 2005.
Visual Rekapitulation Tag 1
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Controller Werkstatt updaten Werkstatt ws = werkstattarray.get(werkstattId); ws.setName(name); ws.setAnsprechpartner(ansprechpartner); ws.setTelefonnummer(telefonnummer);
1.Event Queue.
Arguments to main() int main(int argc, char *argv[]) { int i;
 Präsentation transkript:

Loops Jason Gregory : Game Engine Architecture Tobias Kemper Softwaretechnologie II (Teil 2) HKI Uni Köln SS 2013

Zeit Unterschiedliche Arten von Zeit – Real time – Game time – Local timeline

Loops Rendering Loop – Neuberechnung des Bildschirminhalts für jedes einzelne Frame – Für die Erzeugung der Illusion von Bewegtbildern While (!quit) { updateCamera(); updateSceneElements(); renderScene(); swapBuffers(); }

Loops Game Loop – Unterhält die interagierenden Subsysteme – Periodisches Updaten der Systeme in unterschiedlichen Raten – Masterschleife

void main() // Pong { initGame(); while (true) // game loop { readHumanInterfaceDevices(); if (quitButtonPressed()){ break; // exit the game loop } movePaddles(); moveBall(); collideAndBounceBall(); if (ballImpactedSide(LEFT_PLAYER)){ incremenentScore(RIGHT_PLAYER); resetBall(); } else if (ballImpactedSide(RIGHT_PLAYER)){ incrementScore(LEFT_PLAYER); resetBall(); } renderPlayfield(); }

Game Loop Architecture Windows Message Pumps – Nachrichtenschleife, die auf Nachrichten von Windows "lauscht" und nur wenn alle abgearbeitet sind, wieder die Engine arbeiten lässt Callback-Driven Frameworks – in framework basierten engines wurde die Haupt Game loop schon geschrieben und wird vom Programmierer mit Callback-Functions gefüllt Event-Based Updating – Event System im Spiel behält Überblick über interessante Statusänderungen und updated die Subsysteme

Abstract Timelines abstrakten Zeitachsen, die relativ zu anderen im System liegen können RealTime wird dabei über den CPU internen Timer in CPU-Cycles gemessen GameTime ist unabhängig von der RealTime und kann für verschiedene Effekte genutzt werden Lokale Zeitachsen für video/animation/audio

Zeit messen und mit Zeit arbeiten Menge der Zeit die zwischen Frames vergeht ist bekannt als "Delta Time" Δt 30 FPS -> Δt = 1/30 einer Sekunde Berechnung von Geschwindigkeit (Bsp Raumschiff) Geschwindigkeit v * Δt = Änderung der Position Δx Wichtig: Zeit CPU-Unabhängig machen

Zeiteinheiten und Variablen 64-Bit Integer Zeitmesser Extreme Präzision 32-Bit Integer Kurze Zeitabstände mit hoher Präzision 32-Bit Fließkomma Nur für kurze Δt von maximal wenigen Minuten (eher nur single-frame oder weniger) 1/300 Sekunde Zeiteinheit

Multiprocessor Game Loops Multicore Prozessoren -> Verlagerung hin zu paralleler Datenverarbeitung Multithreaded Programmdesign Nutzung der Hardware maximieren Ruhezeit minimieren

Multicore Architektur nutzen SIMD Fork and Join One Thread per Subsystem Jobs

Netzwerk Multiplayer Game Loops Client-Server Modell Peer-to-Peer

/

QUAKE II

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; int time, oldtime, newtime; char *cddir; ParseCommandLine (lpCmdLine); Qcommon_Init (argc, argv); oldtime = Sys_Milliseconds (); /* main window message loop */ while (1) { // Windows message pump. while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)) { if (!GetMessage (&msg, NULL, 0, 0)) Com_Quit (); sys_msg_time = msg.time; TranslateMessage (&msg); DispatchMessage (&msg); } // Measure real delta time in milliseconds. do { newtime = Sys_Milliseconds (); time = newtime - oldtime; } while (time < 1); // Run a frame of the game. Qcommon_Frame (time); oldtime = newtime; } // never gets here return TRUE; }

void Qcommon_Frame (int msec) { char *s; int time_before, time_between, time_after; // [some details omitted...] // Handle fixed-time mode and time scaling. if (fixedtime->value) msec = fixedtime->value; else if (timescale->value) { msec *= timescale->value; if (msec < 1) msec = 1; } // Service the in-game console. do { s = Sys_ConsoleInput (); if (s) Cbuf_AddText (va("%s\n",s)); } while (s); Cbuf_Execute (); // Run a server frame. SV_Frame (msec); // Run a client frame. CL_Frame (msec); // [some details omitted...] } // never gets here return TRUE; }