Chapter 1 Introduction
What is a Game Engine? What are some examples of game engines? Unity3D, Unreal, Panda3D … What make these game engines? From the user (Game Designer) perspective From the developer (you) perspective What is behind the GUI? What if there is no GUI? Remember: we are limited to 2D only
What are required of a game engine? Ask: why do we need a game engine? Simple: Make building games easier! Then: what is/are required to make building games easier? Two perspectives (for us, CS people): As a tool: use to build games Do the mundane Hide the complex As a software system: Maintain, Refine (improve what’s there), Expand (support additional functionality) Care about: software architecture and organization
What are the mundane? System interface for Resource loading (image, audio, scene files, any files) Input from mouse/keyboard Audio output Some kind of real-time looping mechanism Drawing of objects: simple image, text/fonts Dealing with pixels
What are the complex? Camera Manipulation Illumination: Physics: Lighting effects, shadows Physics: Collision detection: per-pixel accurate? Collision responses Special effects Fire, Explosion, Water
What about as a software system? Commonly used utility objects: Random, Interpolate, Shake Functions to relieve from math details: Chase, Follow Abstraction to relieve from details: Transforms, Materials, Cameras Object hierarchy to facility reuse Architectural framework to present all of the above coherently and facilitate changing and update
So we will learn Implement and hide the mundane Support the complex and present simple programming API All with a software architecture that supports Maintain, refine, and expand
The technology: tools for learning … What we need? Programming language Graphics Support System Support Loading/Input/Output What are viable? C++ / OpenGL / GLUT (or whatever) C++ / D3D / WPF C# / MonoGame / WindForm Java / JOGL / Swing JavaScript / WebGL / HTML5 Our choice: Web-play anywhere!
Goals and Non-goals Goals: Non-Goals: Learn concepts, see how implemented Should: transport your knowledge to another platform Non-Goals: Learn JavaScript, HTML5, or WebGL I know WebGL (barely), do not know JavaScript or HTML5
Development Environment IDE + Deployment platform (Chrome) What is an IDE? Need to make the connection between Chrome and the IDE GLSL Syntax Checker JSLint or JSHint Eventually: needs a math library You do need a math library