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