Computer Graphics


Apply Now

Contents

Preface vii

1 Introduction 1

1.1 Painting and Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Elements of 3D Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.3 Hardware and Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Two-Dimensional Graphics 11

2.1 Pixels, Coordinates, and Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1.1 Pixel Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.1.2 Real-number Coordinate Systems . . . . . . . . . . . . . . . . . . . . . . . 14

2.1.3 Aspect Ratio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

2.1.4 Color Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.2 Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.2.1 Basic Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.2.2 Stroke and Fill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

2.2.3 Polygons, Curves, and Paths . . . . . . . . . . . . . . . . . . . . . . . . . 24

2.3 Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.3.1 Viewing and Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2.3.2 Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2.3.3 Rotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

2.3.4 Combining Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . 31

2.3.5 Scaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2.3.6 Shear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

2.3.7 Window-to-Viewport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

2.3.8 Matrices and Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

2.4 Hierarchical Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2.4.1 Building Complex Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

2.4.2 Scene Graphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

2.4.3 The Transform Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

2.5 Java Graphics2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2.5.1 Graphics2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

2.5.2 Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

2.5.3 Stroke and Fill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2.5.4 Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.5.5 BufferedImage and Pixels . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

2.6 HTML Canvas Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

2.6.1 The 2D Graphics Context . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

i

CONTENTS ii

2.6.2 Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

2.6.3 Stroke and Fill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

2.6.4 Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

2.6.5 Auxiliary Canvases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

2.6.6 Pixel Manipulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

2.6.7 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

2.7 SVG: A Scene Description Language . . . . . . . . . . . . . . . . . . . . . . . . . 66

2.7.1 SVG Document Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

2.7.2 Shapes, Styles, and Transforms . . . . . . . . . . . . . . . . . . . . . . . . 69

2.7.3 Polygons and Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71

2.7.4 Hierarchical Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

2.7.5 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

3 OpenGL 1.1: Geometry 77

3.1 Shapes and Colors in OpenGL 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . 77

3.1.1 OpenGL Primitives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

3.1.2 OpenGL Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

3.1.3 glColor and glVertex with Arrays . . . . . . . . . . . . . . . . . . . . . . . 83

3.1.4 The Depth Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

3.2 3D Coordinates and Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

3.2.1 3D Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

3.2.2 Basic 3D Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

3.2.3 Hierarchical Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

3.3 Projection and Viewing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

3.3.1 Many Coordinate Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

3.3.2 The Viewport Transformation . . . . . . . . . . . . . . . . . . . . . . . . . 95

3.3.3 The Projection Transformation . . . . . . . . . . . . . . . . . . . . . . . . 96

3.3.4 The Modelview Transformation . . . . . . . . . . . . . . . . . . . . . . . . 100

3.3.5 A Camera Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

3.4 Polygonal Meshes and glDrawArrays . . . . . . . . . . . . . . . . . . . . . . . . . 105

3.4.1 Indexed Face Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105

3.4.2 glDrawArrays and glDrawElements . . . . . . . . . . . . . . . . . . . . . . 109

3.4.3 Data Buffers in Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

3.4.4 Display Lists and VBOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

3.5 Some Linear Algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

3.5.1 Vectors and Vector Math . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

3.5.2 Matrices and Transformations . . . . . . . . . . . . . . . . . . . . . . . . . 117

3.5.3 Homogeneous Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

3.6 Using GLUT and JOGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120

3.6.1 Using GLUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

3.6.2 Using JOGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127

3.6.3 About glsim.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

4 OpenGL 1.1: Light and Material 133

4.1 Introduction to Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

4.1.1 Light and Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

4.1.2 Light Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136

4.1.3 Normal Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

CONTENTS iii

4.1.4 The OpenGL Lighting Equation . . . . . . . . . . . . . . . . . . . . . . . 139

4.2 Light and Material in OpenGL 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . 142

4.2.1 Working with Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

4.2.2 Defining Normal Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

4.2.3 Working with Lights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

4.2.4 Global Lighting Properties . . . . . . . . . . . . . . . . . . . . . . . . . . 149

4.3 Image Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

4.3.1 Texture Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

4.3.2 MipMaps and Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

4.3.3 Texture Target and Texture Parameters . . . . . . . . . . . . . . . . . . . 155

4.3.4 Texture Transformation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

4.3.5 Loading a Texture from Memory . . . . . . . . . . . . . . . . . . . . . . . 158

4.3.6 Texture from Color Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . 158

4.3.7 Texture Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

4.3.8 Loading Textures in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

4.3.9 Using Textures with JOGL . . . . . . . . . . . . . . . . . . . . . . . . . . 162

4.4 Lights, Camera, Action . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

4.4.1 Attribute Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164

4.4.2 Moving Camera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166

4.4.3 Moving Light . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168

5 Three.js: A 3D Scene Graph API 171

5.1 Three.js Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

5.1.1 Scene, Renderer, Camera . . . . . . . . . . . . . . . . . . . . . . . . . . . 172

5.1.2 THREE.Object3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

5.1.3 Object, Geometry, Material . . . . . . . . . . . . . . . . . . . . . . . . . . 176

5.1.4 Lights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

5.1.5 A Modeling Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

5.2 Building Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

5.2.1 Indexed Face Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187

5.2.2 Curves and Surfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

5.2.3 Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

5.2.4 Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

5.2.5 Loading JSON Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

5.3 Other Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

5.3.1 Anaglyph Stereo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

5.3.2 User Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

5.3.3 Shadows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

5.3.4 Cubemap Textures and Skyboxes . . . . . . . . . . . . . . . . . . . . . . . 206

5.3.5 Reflection and Refraction . . . . . . . . . . . . . . . . . . . . . . . . . . . 208

6 Introduction to WebGL 213

6.1 The Programmable Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213

6.1.1 The WebGL Graphics Context . . . . . . . . . . . . . . . . . . . . . . . . 214

6.1.2 The Shader Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

6.1.3 Data Flow in the Pipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . 217

6.1.4 Values for Uniform Variables . . . . . . . . . . . . . . . . . . . . . . . . . 220

6.1.5 Values for Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

CONTENTS iv

6.1.6 Drawing a Primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223

6.2 First Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

6.2.1 WebGL Context Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 224

6.2.2 A Bit of GLSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

6.2.3 The RGB Triangle in WebGL . . . . . . . . . . . . . . . . . . . . . . . . . 226

6.2.4 Shape Stamper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229

6.2.5 The POINTS Primitive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

6.2.6 WebGL Error Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234

6.3 GLSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

6.3.1 Basic Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

6.3.2 Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237

6.3.3 Qualifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238

6.3.4 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241

6.3.5 Function Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

6.3.6 Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243

6.3.7 Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244

6.4 Image Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245

6.4.1 Texture Units and Texture Objects . . . . . . . . . . . . . . . . . . . . . . 245

6.4.2 Working with Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

6.4.3 More Ways to Make Textures . . . . . . . . . . . . . . . . . . . . . . . . . 252

6.4.4 Cubemap Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

6.5 Implementing 2D Transforms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

6.5.1 Transforms in GLSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

6.5.2 Transforms in JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . 258

7 3D Graphics with WebGL 263

7.1 Transformations in 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

7.1.1 About Shader Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

7.1.2 Introducing glMatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264

7.1.3 Transforming Coordinates . . . . . . . . . . . . . . . . . . . . . . . . . . . 267

7.1.4 Transforming Normals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268

7.1.5 Rotation by Mouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270

7.2 Lighting and Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

7.2.1 Minimal Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273

7.2.2 Specular Reflection and Phong Shading . . . . . . . . . . . . . . . . . . . 275

7.2.3 Adding Complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278

7.2.4 Two-sided Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279

7.2.5 Moving Lights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281

7.2.6 Spotlights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282

7.2.7 Light Attenuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284

7.2.8 Diskworld 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285

7.3 Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

7.3.1 Texture Transforms with glMatrix . . . . . . . . . . . . . . . . . . . . . . 286

7.3.2 Generated Texture Coordinates . . . . . . . . . . . . . . . . . . . . . . . . 287

7.3.3 Procedural Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289

7.3.4 Bumpmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292

7.3.5 Environment Mapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

CONTENTS v

7.4 Framebuffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

7.4.1 Framebuffer Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299

7.4.2 Render To Texture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302

7.4.3 Renderbuffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304

7.4.4 Dynamic Cubemap Textures . . . . . . . . . . . . . . . . . . . . . . . . . 304

7.5 WebGL Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

7.5.1 Anisotropic Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308

7.5.2 Floating-Point Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

7.5.3 Deferred Shading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312

8 Beyond Realtime Graphics 315

8.1 Ray Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315

8.1.1 Ray Casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

8.1.2 Recursive Ray Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

8.1.3 Limitations of Ray Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . 319

8.2 Path Tracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

8.2.1 BSDF’s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

8.2.2 The Path Tracing Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . 322

APPENDICES

A Programming Languages 325

A.1 The Java Programming Language . . . . . . . . . . . . . . . . . . . . . . . . . . . 325

A.1.1 Basic Language Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . 326

A.1.2 Objects and Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . 328

A.1.3 Windows and Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

A.2 The C Programming Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

A.2.1 Language Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

A.2.2 Pointers and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335

A.2.3 Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338

A.3 The JavaScript Programming Language . . . . . . . . . . . . . . . . . . . . . . . 340

A.3.1 The Core Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340

A.3.2 Arrays and Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

A.3.3 JavaScript on Web Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . 347

A.3.4 Interacting with the Page . . . . . . . . . . . . . . . . . . . . . . . . . . . 349

B Blender 355

B.1 Blender Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355

B.1.1 The 3D View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356

B.1.2 Adding and Transforming Objects . . . . . . . . . . . . . . . . . . . . . . 357

B.1.3 Edit Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360

B.1.4 Light, Material, and Texture . . . . . . . . . . . . . . . . . . . . . . . . . 361

B.1.5 Saving Your Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

B.1.6 More Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363

B.2 Blender Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

B.2.1 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365

B.2.2 Curves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

B.2.3 Proportional Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

CONTENTS vi

B.2.4 Extruding Meshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369

B.2.5 Mesh Modifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370

B.2.6 More on Light and Material . . . . . . . . . . . . . . . . . . . . . . . . . . 373

B.3 Blender Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375

B.3.1 Keyframe Animation and F-Curves . . . . . . . . . . . . . . . . . . . . . . 375

B.3.2 Tracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378

B.3.3 Path Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

B.3.4 Particle Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380

B.3.5 Rendering an Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

C Gimp and Inkscape 387

C.1 Gimp: A 2D Painting Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

C.1.1 Painting Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388

C.1.2 Selections and Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391

C.1.3 Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393

C.2 Inkscape: A 2D Drawing Program . . . . . . . . . . . . . . . . . . . . . . . . . . 395

D Listing of Sample Programs 401

E Glossary 411