## Advanced Computer Graphics

**Computer graphics algorithms are being increasingly** used in many scientific and technological areas, with an explosive growth in applications requiring threedimensional rendering and animation. The expansion of computer graphics into diverse and interdisciplinary areas is the result of many factors such as the ever increasing power and capability of the graphics hardware, decreasing hardware costs, availability of a wide range of software tools, research advancements in the field, and significant improvements in graphics application programming interface (API). Additionally, vast amounts of resources including images, 3D models, and libraries are now easily available to developers and researchers for their work. With the emergence of programmable graphics hardware, the power of graphics APIs to render complex models and scenes has greatly increased, and it has become easier to create faster and robust implementations of several advanced algorithms. Following these developments, there is also an increasing need for reference topics that give an in-depth coverage of advanced methods that are fundamental to many application domains.

**Advanced computer graphics is** a field that encompasses a vast range of topics and a large number of subfields such as game engine development, real-time rendering, global illumination methods and non-photorealistic rendering. Indeed, this field includes a large body of concepts and algorithms not generally covered in introductory graphics texts that deal primarily with basic transformations, projections, lighting, three-dimensional modelling techniques, texturing and rasterization algorithms.

**This topic aims to provide a comprehensive** treatment of the theoretical concepts and associated methods related to four core areas: articulated character animation, curve and surface design, mesh processing, and collision detection. The area of character animation is further subdivided into scene graphs, skeletal animation, quaternion rotations and kinematics. A principal objective of this topic is to serve as a reference text for both students and researchers. It is designed for courses that build upon introductory computer graphics concepts. The topics discussed in the topic are commonly covered in graduate or advanced undergraduate graphics courses. These include the theoretical as well as the implementation aspects of several algorithms. To help students understand the concepts clearly, a set of demonstration programs is included with each topic. Necessary class libraries giving the implementations of important methods of each class are also provided. Some of the concepts that have recently found a great deal of importance in research such as dual quaternion transformations, and bounding interval hierarchies are also presented.

## Supplementary Material

**Each topic is accompanied by a collection of** software modules and demonstration programs that show the details and working of key algorithms. All programs are written in C++. The reader is assumed to be familiar with the basic OpenGL library, which is a easy-to-program, widely accepted cross platform API for developing graphics applications. To keep the implementations simple, shader language functions or any other OpenGL extensions are not used.

**The programs are written entirely by the author**, with the primary aim of motivating students to explore further each technique, and to implement their own creative ideas. They are just tools which developers and researchers could use to build larger frameworks or to try better solutions. A simple programming approach is used so that students with minimal knowledge of C/C++ language and OpenGL will be able to start using the code and work towards more complex or useful applications. None of the software is optimized in terms of algorithm performance or speed. Similarly, object oriented programming concepts are not heavily used, leaving room for a lot of further development.

## Notations

In order to have a clear distinction between points, vectors and other mathematical entities, the following notation is normally used in this topic. Note that in exceptional cases, a different notation may be used in each of the following categories to avoid ambiguity. For example, a tangent vector to a curve may be denoted by T(t) instead of t(t).

**Point:** A point is generally denoted by an uppercase letter in italics as P. The threedimensional coordinates of P will be written as (xp, yp, zp). The vector representation of P having the same components as above will be denoted as p. The coordinates of the point Pi will be written as either (xpi, ypi, zpi) or, if there is no ambiguity, as simply (xi, yi, zi).

**Vector:** A vector will be denoted by a lowercase letter in italics and bold font as v. Its vector components will be noted as (xv, yv, zv).

**Complex number**: Complex numbers are treated as two-dimensional vectors and denoted using a lowercase letter in italics and bold font as z.

**Quaternions:** Uppercase letters in italic font (such as Q) will be used to denote quaternions. Dual-quaternions will be denoted using uppercase letters in bold and italic font as Q.

**Line segment:** A line segment will be noted using its end points as AB.

**Triangle:** A triangle will be denoted using its vertices as ABC and its area as AABC. A triangle may also be named using an uppercase letter in italics as T.

**Plane:** Uppercase Greek symbols such as r, n, will be used for denoting planes and general polygonal surface elements.

**Matrices:** Matrices will be denoted using uppercase letters in bold font as M.