| Getting Started | p. 1 |
| Introduction | p. 1 |
| Access to Libraries | p. 2 |
| Data Types | p. 2 |
| Terminology | p. 3 |
| The OpenGL Utility Toolkit-GLUT | p. 3 |
| Our First Program | p. 4 |
| Drawing Primitives | p. 7 |
| Gaps, Lines and Blobs | p. 10 |
| Other Line Types | p. 11 |
| Surface Patterns and Polygon Stippling | p. 12 |
| Character Generation | p. 15 |
| Parametric Representation of Curves | p. 17 |
| The Growth or Logarithmic Spiral | p. 19 |
| Approximation and Processing Efficiency | p. 21 |
| Line Drawing | p. 22 |
| The Digital Difference Analyser | p. 23 |
| Bresenham's Algorithm | p. 25 |
| Bresenham's Algorithm for a Circle | p. 27 |
| Problem Solving Through Graphics | p. 31 |
| The Application Programming Interface (API) | p. 34 |
| The OpenGL Utility Toolkit (GLUT) Library | p. 34 |
| Mouse Interaction | p. 35 |
| Keyboard Interaction | p. 36 |
| Exercises | p. 37 |
| Conclusion | p. 37 |
| Image File Formats | p. 39 |
| Introduction | p. 39 |
| The Bitmap File | p. 39 |
| Bitmap-file Structure | p. 40 |
| A Typical File Layout | p. 41 |
| Reading and Drawing a Bitmap File | p. 42 |
| Creating a Display Window | p. 45 |
| Creating the Image for Display | p. 46 |
| Monochrome Bitmaps | p. 46 |
| A General Class for Input of Bit Map Files | p. 47 |
| Manipulating Bit Maps - Embossing | p. 49 |
| Audio/Video Interleaved (AVI) File Format | p. 51 |
| Chunk Hierarchy | p. 53 |
| An Example of Web Cam Display | p. 55 |
| Compression | p. 58 |
| Exercises | p. 59 |
| Conclusion | p. 59 |
| Image Processing | p. 61 |
| Introduction | p. 61 |
| Finding Objects | p. 61 |
| Edge Detection | p. 62 |
| Numerical Implementation | p. 63 |
| Sobel Operator | p. 63 |
| Convolution | p. 64 |
| Laplacian Operator | p. 66 |
| Smoothing and Edge Finding | p. 69 |
| Histogram Equalisation | p. 71 |
| Component (object) Labelling | p. 73 |
| Exploring Connectivity (1) | p. 74 |
| Exploring Connectivity (2) | p. 76 |
| Multiple Regions | p. 77 |
| Drawing on the Screen and Data Capture | p. 77 |
| Outlining of Areas of Interest on Images | p. 80 |
| An Approach to Automating Edge Detection | p. 82 |
| Exercises | p. 85 |
| Conclusion | p. 85 |
| Transformations | p. 87 |
| Introduction | p. 87 |
| Representing Points and Vectors | p. 87 |
| Vector Dot Products | p. 89 |
| The Vector Cross Product | p. 89 |
| Using the Cross Product to Provide Colour Variation to a Cylinder | p. 91 |
| Coordinate Systems | p. 94 |
| Transformations | p. 95 |
| Rotation | p. 96 |
| A Simple Example of Rotation | p. 98 |
| General Rotations About Any Point | p. 99 |
| The Model View Matrix | p. 103 |
| Adding Some Movement | p. 103 |
| Movement of Composite Objects | p. 104 |
| The Orrery | p. 104 |
| The Internal Combustion Engine | p. 107 |
| Arms, Robots, Actuators and Movement | p. 113 |
| Data Capture of Limb Movement | p. 114 |
| Animation - A Walking Robot | p. 116 |
| Collision Detection | p. 120 |
| Exercises | p. 124 |
| Conclusion | p. 124 |
| Viewing and Projection | p. 125 |
| Introduction | p. 125 |
| Vertex Pipeline | p. 125 |
| The Viewing Process | p. 126 |
| Engineering Drawings | p. 128 |
| Orthographic or Parallel Projection | p. 132 |
| From Real World to Screen Window | p. 132 |
| Inside the Matrix | p. 134 |
| Getting to Grips with Where Things Are | p. 137 |
| Perspective Projection | p. 139 |
| Understanding the View | p. 143 |
| Exercises | p. 145 |
| Conclusion | p. 146 |
| Lighting and Colour | p. 147 |
| Introduction | p. 147 |
| The Electromagnetic Spectrum | p. 147 |
| Colour | p. 148 |
| Mixing Colours | p. 149 |
| The Shading Model | p. 150 |
| Lighting and Illumination | p. 151 |
| Setting up the Lighting | p. 152 |
| Addition of Specular Light | p. 157 |
| A Synthetic Face | p. 162 |
| Getting the Vertex Coordinates | p. 162 |
| Moving the Eye and Light Source Together | p. 163 |
| Shadows - A Projection | p. 164 |
| Derivation of the Shadow Outline Using Equation of a Line | p. 164 |
| A Polygon Moving Shadow | p. 166 |
| Exercises | p. 168 |
| Conclusion | p. 169 |
| Texture Mapping | p. 171 |
| Introduction | p. 171 |
| The Mapping Process | p. 171 |
| Setting up Textures | p. 172 |
| Drawing the Texture | p. 174 |
| Mapping onto Curved Surfaces | p. 176 |
| Mercator Lines of Projection | p. 176 |
| Quadric Surfaces | p. 177 |
| Mapping onto a Spherical Surface | p. 178 |
| Mapping one Image to Sphere | p. 182 |
| Cylinder Texturing Mapping | p. 184 |
| Mapping to a Circle | p. 185 |
| Mapping to a Cone | p. 186 |
| Mapping onto a General Surface | p. 189 |
| Mapping onto a Contour Surface | p. 191 |
| Adding Some Movement - A Rotating Hemisphere | p. 193 |
| Movement via the Mouse | p. 196 |
| Using Bit Maps to Provide Context | p. 200 |
| Blending | p. 202 |
| Manipulating Pixels | p. 206 |
| Three-Dimensional Texturing | p. 212 |
| Simulation of a Spherical Object | p. 213 |
| Building a Solid Model of a Head | p. 219 |
| Exercises | p. 226 |
| Conclusion | p. 226 |
| Objects to Artefacts | p. 227 |
| Introduction | p. 227 |
| Artefact Hierarchy | p. 227 |
| Construction Double Sided Squares | p. 228 |
| A Box as a Basic Building Block | p. 232 |
| Building a Table | p. 233 |
| Integrating to a System | p. 235 |
| Changing the Furniture Style | p. 243 |
| Exercises | p. 247 |
| Conclusion | p. 247 |
| Curves, Surfaces and Patterns | p. 249 |
| Introduction | p. 249 |
| Fitting a Line or a Curve | p. 250 |
| Straight Line Fitting to Data Points | p. 250 |
| Lagrange Polynomials and Curve Fitting | p. 251 |
| A Practical Approach to Curve Fitting | p. 251 |
| Curve Fitting Using Cubic Splines | p. 252 |
| Surface Construction from Contour Maps | p. 256 |
| A Spline Surface Construction | p. 258 |
| Bezier Curves | p. 260 |
| General Curve Representation | p. 263 |
| The Beginning's of a Bezier Surface | p. 267 |
| Using Rotation to Sweep Out a Ring | p. 271 |
| Patching a Surface | p. 271 |
| Complex Shapes and Fractal Geometry | p. 274 |
| Introductory Concepts | p. 275 |
| Reduction Copying | p. 276 |
| Implementation of a Sierpinski Gasket | p. 278 |
| Pascal's Triangle | p. 280 |
| The Sierpinski Gasket in 3 Dimensions | p. 280 |
| Order Out of Chaos - A Non-deterministic Gasket? | p. 284 |
| An Alternative Idea for a Tree or Plant | p. 290 |
| Koch Curves | p. 292 |
| Further Thoughts on the Koch Snowflake | p. 295 |
| Self-Similarity | p. 296 |
| Random Koch Fractals | p. 298 |
| Back to Trees and Bushes | p. 300 |
| Brownian Motion | p. 304 |
| Fractalised Lines | p. 305 |
| Fractal Surfaces | p. 307 |
| Exercises | p. 310 |
| Conclusion | p. 311 |
| Appendix A | p. 313 |
| Starting up VC++ 6.0 | p. 313 |
| Appendix B | p. 317 |
| Bresenham's Line Algorithm - General Conditions | p. 317 |
| Appendix C | p. 319 |
| Matrix and Vector Algebra | p. 319 |
| Matrix Addition or Subtraction | p. 319 |
| Matrix Multiplication | p. 319 |
| Matrix Vector Multiplication | p. 320 |
| Example of Matrix Multiplication | p. 321 |
| Shearing Matrices | p. 321 |
| Appendix D | p. 323 |
| Equation of a Plane | p. 323 |
| References | p. 325 |
| Index of Functions | p. 327 |
| Index | p. 329 |
| Table of Contents provided by Ingram. All Rights Reserved. |