### 3D Game Graphics - Telerik Academy

```Computer Graphics in
Game programming
Basics. OpenGL. “Hello world”
George Georgiev
Telerik Corporation
www.telerik.com
Table of Contents
 Computer graphics
 2D
 2.5D
 3D
 3D Graphics Libraries
 OpenGL
 Introduction to OpenGL
 Setting up OpenGL
 “Hello World”
2
Computer graphics
Types, Geometry, Libraries
Computer graphics
 Computer graphics
are
 Representation of image data
 2 types – 2D and 3D
 Computation-heavy
 Closely related to computer geometry
 Basic
terminology
 Primitives
 Transformations
 Interpolation
4
Computer graphics
 2-Dimensional (2D) graphics
 Space is planar
 Units – usually pixels
 Use 2D geometry
 Drawing order matters
 Image files are essential
 Pseudo 3-D (2.5D) graphics
 Contain per-object depth information
 Use oblique projections of 2D objects
5
Computer graphics
 3-Dimensional (3D) graphics
 Provide depth information
 Units – whatever you like
 Use both 3D and 2D geometry
 Drawing order DOESN’T matter
 except for transparency
 Lighting and texturing are essential
 Model files are essential
6
2D Game Graphics
Basics, Common practices
2D Game Graphics
 Primitives
 Pixels
 Images (textures)
 Geometry – Dots, Lines, Triangles (rarely used)
 Objects (sprites)
 Groups of pixels
 Images with transparency
 Geometry meshes
8
2D Game Graphics
 Transformations
 Translation
 ‘Mirroring’
 Rotation (only for ‘geometry’ sprites)
 Scaling (only for ‘geometry’ sprites)
9
2D Game Graphics
 Coloring
 Per-pixel
 Per-vertex (‘geometry’ sprites)
 Animation
 Image sequences
10
2D Game Graphics
 Rendering process
 Create a color buffer (usually a matrix with the
screen resolution as dimensions)
 Render the background to the buffer
 Render the foreground to the buffer
 Draw the color buffer to the screen
11
2.5D Game Graphics
Basics, Common practices
2.5D Game Graphics
 Primitives
 Images (textures)
 Objects (sprites)
 Multiple images, one for each object
orientation
13
2.5D Game Graphics
 Transformations
 Translation
 ‘Mirroring’ (not often)
 Oblique projection (pre-rendered)
 Coloring
 Per-pixel
 Animation
 Image sequences
14
2.5D Example
15
3D Game Graphics
Finally…
3D Game Graphics
 Primitives
 Geometry – Vertices, Lines, Triangles
 Objects (sprites)
 Geometry meshes
 Triangles (solid)
 Lines (wireframe)
 Vertices (‘constellations’)
17
3D Game Graphics
 Transformations
 Translation
 Rotation
 Scaling
 Uniform
 Non-uniform
 Projection
 Parallel (mainly orthogonal)
 Perspective
18
3D Game Graphics
 Coloring
& Transparency
 Per-vertex
 Drawing order matters for transparency!
 Transparent objects are drawn after opaque ones
 Lighting
 Per-vertex
 Essential
 Texturing
19
3D Game Graphics
 Perspective viewing
 Elements
 Eye position
 View angle
 Near clipping plane
 Far clipping plane
20
3D Game Graphics
 Eye position
 Usually called camera position
 Represents the user’s viewing position
 View angle
 The camera’s “lens width”
 Represents the user’s vision capabilities
 60 or 45 degrees are most commonly used
 The larger the view angle, the larger the view
volume
21
3D Game Graphics
 Near clipping plane
 The nearest visible distance
 Represents the display
 Far clipping
plane
 The farthest visible distance
 Objects behind it are not rendered
22
3D Game Graphics – view
volume
 The “Frustum”
 The view volume, clipped by
 The near clipping plane
 The far clipping plane
 Contains the visible objects
 Visible objects are projected on the near clipping
plane
23
3D Game Graphics
 Rendering process
 Create depth and color buffers (matrices with
the screen resolution’s dimensions)
 Project objects’ vertices on the near clipping
plane
 Fill depth buffer (interpolating vertices depth)
 Clip overlapping objects’ faces (using depth
buffer)
 Interpolate colors and render color buffer
24
3D Game Graphics
 Rendering 3D graphics
to a 2D screen is a very
complicated task
 Computation-heavy
 Knowledge-heavy
 That’s why we use 3D graphics libraries
 OpenGL
 Direct3D
 Nvidia Cuda
25
OpenGL
Introduction. "Hello World"
Introduction to OpenGL
 OpenGL 2.0 & 2.1
 Cross-platform
 Cross-language
 Hardware accelerated
 Reviewed and updated
 ARB, Khronos Group
 Extension mechanism
 Massive community
27
Introduction to OpenGL (2)
 Low-level
 Procedural
 Shader support
 GLSL
 State-machine
 Open-source, Open standard
28
Using OpenGL
 Additional
libraries
 GLEW – The extension wrangler
 Makes it easy to access extensions
 Included before all other OpenGL libraries
 FreeGLUT – The utility toolkit
 Handles window procedures
 Handles input
 Cross-platform
 Supersedes GLUT
29
Setting up OpenGL
 OpenGL & FreeGLUT with MS Visual Studio
 Gathering “include” files
 Compiling “.lib” and “.dll” files
 Adding to the SDKs
 Adding the .dll files to the system
 Making a project
 Linking against the “.lib” files
30
Setting up OpenGL
 Useful links
 Setting up ONLY OpenGL
 http://thoughtsfrommylife.com/article-748OpenGL_and_Visual_Studio_Express_2008
 OpenGL setup and beginner tutorials
 http://www.swiftless.com/opengltuts.html
 Large-scope OpenGL tutorials (currently –
11.07.2011 – under maintenance)
 http://nehe.gamedev.net/
31
OpenGL Setup
Live Demo
OpenGL "Hello World"
 OpenGL “Hello World”
with FreeGLUT
 Goals
 Create a window with OpenGL working in it
 Introduce GLUT window procedures and the
glutMainLoop
 OpenGL knowledge attained:
 OpenGL colors
 Identity matrix
 glClear
33
OpenGL “Hello World”
Live Demo
Comuputer Graphics in Game
programming
Questions?
```