www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 1 of 16
U N I T
G e o m e t r i c
AffineTransformations
O b j e c t s
- 5
a n d
T r a n s f o r m a t i o n s
A transformation is a function that takes a point (or vector) and maps that point (or vector) into
another point (or vector).
Such a function is shown in the figure.
In the functional form, Q = T(P) for points, or v =R(u) for vectors.
Using homogeneous coordinates, both vectors and points can be
represented as 4-D column matrices, and the transformation can be
defined with a single function
q = f(p), v = f(u),
that transforms the representations of both points and vectors in a given
frame.
Advantages/ Characteristics of Affine Transformations:
 When working with homogeneous coordinates, A is a 4 x 4 matrix that leaves unchanged
the fourth (w) component of a representation. A is of the form
The 12 values can be set arbitrarily, and hence this transformation can be said to have has 12
degrees of freedom. However, points and vectors have slightly different representations in
the affine space.
Vector representation
Point representation
If an arbitrary A is applied to a vector, then v=Au, and only nine of the elements of A affect u,
and, thus, there are only 9 degrees of freedom in the transformation of vectors. Affine
transformations of points have the full 12 degrees of freedom.
 Affine transformations preserve lines. Consider the line P(α) = Po+ α d, where Po is a
point and d is a vector. In any frame, the line can be expressed as p(α) =Po + α d, where
Po and d are the representations of Po and d in that frame.
For any affine transformation matrix A, A P(α) =A Po + α A d.
Thus, transformed line can be constructed by first transforming Po and d, and then using
whatever line-generation algorithm for the display.
 Consider 2-point form of the line, p(α ) = α Po + (l - α )Pl, a similar result holds. The
representations of Po and P1 are transformed, and then the transformed line is
constructed. Because there are only 12 elements in M that can be selected arbitrarily,
there are 12 degrees of freedom in the affine transformation of a line or line segment.
Types of Affine Transformations in Computer Graphics:
1) Translation
2) Rotation, and
3) Scaling.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 2 of 16
With slight modifications, these results can also be used to describe the standard parallel and
perspective projections.
 Translation
Translation is an operation that displaces points by a fixed distance in a given direction.
To specify a translation, only a displacement vector d is specified,
because the transformed points are given by P'=P+d for all points P
on the object. Note that this definition of translation makes no
reference to a frame or representation. Translation has 3 degrees of
freedom, because the three components of the displacement vector can
be specified arbitrarily.
 Rotation
Rotation is more difficult to specify than translation, because more parameters are involved
E.g. Rotating a point about the origin in a 2-D plane, as shown below.
Having specified a particular point - the origin – there is a particular frame. A 2D point at (x, y) in this frame is rotated about the origin by an angle Ѳ to the
position (x’, y’).
Standard equations describing this rotation can be obtained by representing (x, y)
and (x', y') in polar form:
x = ρ cosϕ
y = ρ sinϕ
x’ = ρ cos(Ѳ+ϕ)
y’ = ρ sin(Ѳ+ϕ)
Expanding these terms using the trigonometric identities for the sine and cosine of the sum of
two angles,
x’ = ρ cos(ϕ) cos(Ѳ) - ρ sin(ϕ) sin(Ѳ) = x cos(Ѳ) - y sin(Ѳ)
y’ = ρ cos(ϕ) sin(Ѳ) + ρ sin(ϕ) cos(Ѳ) = x sin(Ѳ) + y cos(Ѳ)
These equations can be written in matrix form as
This form can be expanded to 3-Ds later.
Note three features of this transformation that extend to other rotations:
1. There is one point- the origin, in this case-that is unchanged by the rotation. This point is
called the fixed point of the transformation.
2. Knowing that the 2-D plane is part of 3-D space, this rotation can be re-interpreted in 3Ds. In a right handed system, when the x and y axes are drawn in the standard way, the
positive z axis comes out of the page. Positive direction of rotation is defined
counterclockwise when looking down the positive z axis toward the origin. This
definition is used to define positive rotations about other axes.
3. 2-D rotation in the plane is equivalent to 3-D rotation about the z-axis. Points in planes of
constant z all rotate in a similar manner, leaving their z values unchanged.
These observations can be used to define a general 3-D rotation that is independent of the frame.
Three entities shown in figure, to be specified are:
a. A fixed point (Pf),
b. A rotation angle (Ѳ), and
c. A line or vector about which to rotate.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 3 of 16
For a given fixed point, there are 3 degrees of freedom: the two angles necessary to specify the
orientation of the vector, and the angle that specifies the amount of rotation about the vector.
Rigid-body transformations: Rotation and translation are known as rigid-body transformations.
No combination of rotations and translations can alter the shape of an object; they can alter only
the object's location and orientation. Consequently, rotation and translation alone cannot give all
possible affine transformations.
Scaling
Scaling is an affine non-rigid-body transformation. Scaling can make an object bigger or
smaller, as shown in figure below.
This figure illustrates both uniform scaling in all directions and scaling in a
single direction. Non-uniform scaling is needed to build up the full set of
affine transformations that are used in modeling and viewing.
Scaling transformations have a fixed point, as shown below.
Hence, to specify a scaling, the fixed point, a direction in which scaling is
needed, and a scale factor (α) can be specified. For α > 1, the object gets
longer in the specified direction; for 0 ≥ α < 1, the object gets smaller in
that direction.
Negative values of α give reflection (figure below) about the fixed point, in the scaling direction.
A properly chosen sequence of scalings, translations, and rotations can be combined to form any
affine transformation.
Transformations in Homogeneous Coordinates
An API represents each affine transformation within a frame. This frame may be altered in an
application. Such transformations are represented by a 4 x 4 matrix of the form,
Advantages of using homogeneous coordinates:

All affine (line-preserving) transformations can be represented as matrix multiplications
in homogeneous coordinates. Although 4-D work is involved in solving 3-D problems,
less arithmetic work is involved when homogeneous coordinates are used.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 4 of 16

The uniform representation of all affine transformations makes carrying out successive
transformations (concatenation) far easier than in 3-D space.
 In addition, modern hardware implements homogeneous-coordinate operations directly,
using parallelism to achieve high-speed calculations.
 Translation
Translation displaces points to new positions defined by a displacement vector. If the point p is
moved to p' by displacing by a distance d, then
p' = p + d.
Looking at their homogeneous-coordinate forms
,
these equations can be written component by component as
This method of representing translation using the addition of column matrices does not combine
well with the representations of other affine transformations. However, this result can also be
obtained using the matrix multiplication, p’ = Tp where,
T is called the translation matrix.
It can also be written as T(αx, αy, αz) to emphasize the three independent parameters.
It might appear that the fourth element of the column matrices is not necessary. However, it is
not possible to get the same result using a 3-D version in the form p' =Tp. For this reason, the use
of homogeneous coordinates is often seen as a clever trick that allows converting the addition of
column matrices in 3-Ds to matrix-matrix multiplication in 4-Ds.
Inverse of a translation matrix can be obtained either by applying an inversion algorithm or by
noting that, if a point is displaced by the vector d, it is possible to return to the original position
by a displacement of -d. By either method, it can be found that
 Scaling
For both scaling and rotation, there is a fixed point that is unchanged by the transformation. Let
the fixed point be the origin.
A scaling matrix with a fixed point of the origin allows for independent scaling along the
coordinate axes. The three equations are
These three equations can be combined in homogeneous form as p’ = S p where
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 5 of 16
Note that, as is true of the translation matrix and, indeed, of all homogeneous coordinate
transformations, the final row of the matrix does not depend on the particular transformation, but
rather forces the fourth component of the transformed point to retain the value 1.
Inverse of a scaling matrix can be obtained by applying the reciprocals of the scale factors:
 Rotation
Rotation with a fixed point at the origin:
There are 3 degrees of freedom corresponding to the ability to rotate independently about the
three coordinate axes. But care should be taken because matrix multiplication is not a
commutative operation. Rotation about the x axis by an angle Ѳ followed by rotation about the y
axis by an angle ϕ does not give the same result as the one that could be obtained if the order of
the rotations be reversed.
Matrices for rotation about the individual axes can be found directly from the results of the 2-D
rotation. A 2-D rotation is actually a rotation in 3-Ds about the z axis, and the points remain in
planes of constant z. Thus, in 3-Ds, the equations for rotation about the z axis by an angle Ѳ are
x' = x cosѲ - y sinѲ,
y’ = x sinѲ + y cosѲ,
z’ = z
or, in matrix form, p’ = Rz p where
Matrices for rotation about the x and y axes can be derived through an identical argument.
Rotation about x-axis: Here x values are unchanged, and points rotate in planes of constant x
forming a 2-D rotation. The matrix is
Rotation about y-axis: y values are unchanged. The matrix is
Note:
The signs of the sine terms are consistent with the definition of a positive rotation in a righthanded system.
Suppose R denote any of the three rotation matrices. A rotation by Ѳ can always be undone by a
subsequent rotation by -Ѳ; hence, R -1(Ѳ) = R(-Ѳ).
In addition, noting that all the cosine terms are on the diagonal and the sine terms are offdiagonal, the trigonometric identities i.e., cos(-Ѳ) = cos(Ѳ) and sin(-Ѳ) = -sin(Ѳ), can be used to
find R -1(Ѳ) = RT(-Ѳ).
It is shown later that any desired rotation matrix can be constructed, with a fixed point at the
origin, as a product of individual rotations about the three axes
R =RzRyRx.
Using the fact that the transpose of a product is the product of the transposes in the reverse order,
for any rotation matrix,
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 6 of 16
R-1 = RT.
A matrix whose inverse is equal to its transpose is called an orthogonal matrix; all orthogonal
matrices correspond to rotations about the origin.
 Shear
It is regarded as a basic type, although it can be derived from the others.
Consider a cube centered at the origin, aligned with the
axes and viewed from the positive z axis, as shown. If
the top of the cube is pulled to the right and the bottom
to the left, then it is a shear transformation in the x
direction. Neither the y nor the z values are changed by
the shear, so this operation can be called x shear to
distinguish it from shears of the cube in other possible directions.
The use of trigonometry on figure characterizes each shear by a single angle
Ѳ; the equations for this shear are
x' = x + y cotѲ,
y’=y
z’=z leading to the shearing matrix
The inverse can be obtained by noting that shear is needed only in the opposite direction; hence,
Concatenation of Transformations
Multiplication of the basic transformations in sequence to define arbitrary affine transformations
is called concatenation.
Assume that three successive transformations on a point p are performed creating a new point q.
Because the matrix product is associative, the sequence can be written as q = CBAp, without
parentheses. However, the order in which the transformations are performed does affect the
efficiency of the calculation.
E.g.
A is performed followed by B, followed by C – then q = (C(B(Ap))).
If a single point is to be transformed, this order is the most efficient, because each matrix
multiplication involves multiplying a column matrix by a square matrix.
If many points are to be transformed, then following two steps can be followed:
1. M = CBA is calculated.
2. Then, M is used on each point i.e. q=Mp.
This order corresponds to the pipeline below.
where M is computed first, then it is loaded into a pipeline
transformation unit. If the operations are counted, although little more
work is needed in computing M initially, because M may be applied to
tens of thousands of points, this extra work is insignificant compared
with the savings obtained by using a single matrix multiplication for each point.
Deriving Examples of Computing M
 Rotation about a Fixed Point
Transformations with a fixed point at the origin can be altered to obtain the transformation about
an arbitrary fixed point.
E.g. Rotation about the z axis:
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 7 of 16
Consider a cube with its center at Pf and its sides aligned with the axes. The cube is to be rotated
about the z axis about its center pf, which becomes the fixed point of the transformation, as
shown below:
If Pf is the origin, simply Rz(Ѳ) is used. This
observation suggests the strategy of first
moving the cube to the origin. Then Rz(Ѳ) is
applied, and finally the object is moved back
such that its center is again at Pf.
This sequence is shown below:
In terms of basic affine transformations, the first is T( -pf), the second is Rz(Ѳ), and the final is
T(pf). Concatenating them together, the following single matrix is obtained:
M =T(Pf)(Rz(Ѳ)T(-Pf).
Multiplying the matrices,
 General Rotation
An arbitrary rotation about the origin can be composed of three successive rotations about the
three axes. The order is not unique, although the resulting rotation matrix is.
Desired matrix is formed by first doing a rotation about the z axis, then doing a rotation about the
y axis, and concluding with a rotation about the x axis.
Consider the cube centered at the origin with its sides aligned with the axes, as shown in (a)
below.
It can be rotated about the z axis by an angle α to orient it
as in (b).
Then the cube can be rotated by an angle β about the y axis, as shown in a top view in figure
below.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 8 of 16
Finally, the cube can be rotated by an angle γ about the x axis, as shown in a side view below.
Now the final rotation matrix is R = RxRyRz.
Any desired orientation can be achieved by proper choice of α, β, and γ although, finding these
angles can be tricky.
 The Instance Transformation
Consider a scene composed of many simple objects shown below.
One option is to define each of these objects, through its vertices, in the
desired location with the desired orientation and size.
An alternative is to define each of the object types once at a convenient
size, in a convenient place, and with a convenient orientation. Each
occurrence of an object in the scene is an instance of that object's
prototype, and then the desired size, orientation, and location can be
obtained by applying an affine transformation - the instance
transformation - to the prototype.
A simple database can be defined to describe a scene from a list of object identifiers (such as 1
for a cube and 2 for a sphere), and of the instance transformation to be applied to each object.
The instance transformation is applied in the order shown below.
Objects are usually defined in their own frames, with the origin at
the center of mass and the sides aligned with the axes. First, the
object is scaled to the desired size. Then, it is oriented with a
rotation matrix. Finally, it is translated to the desired orientation.
Hence, the instance transformation is of the form
M =TRS.
Modeling with the instance transformation works well not only with
pipeline architectures, but also with the display lists. A complex
object that is used many times can be loaded into the server once as
a display list. Displaying each instance of it requires only sending the appropriate instance
transformation to the server.
 Rotation about an Arbitrary Axis: To perform a rotation about a line that is not
parallel to one of the coordinate axes, that line need to be aligned with one of the
coordinate axes through some intermediate transformation and then
the actual specified rotation be performed about that coordinate axis.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 9 of 16
Consider rotating a cube, as shown in figure.
Three entities needed to specify this rotation are:
1. A fixed point p0 assumed as the center of the cube
2. A vector about which to rotate, and
3. An angle of rotation.
Step 1: Translation T(-p0) is applied to move the fixed point to the origin After the initial
translation, the required rotation problem is as shown below. [T(-p0)]
Step 2: Two rotations are performed to align (coincident) the axis of rotation with the z axis.
i. Rotation about x-axis until the axis is zx-plane. [Rx(Ѳx)]
ii. Rotation about y-axis until rotation axis coincides with the z-axis. [Ry(Ѳy)]
Step 3: Rotation by required angle θ ie then performed about the z axis.
Step 4: Undo rotation about y-axis earlier performed.
Step 5: Undo rotation about x-axis earlier performed.
Finally all the matrices are concatenated to find
To obtain T(-p0) and T (p0):
T(-p0) =
T(p0) =
To obtain Rx(Ѳx) and Ry(Ѳy) without computing θx and θy:
A line segment is drawn from the origin to the point (αx, αy αz). This
line segment has unit length and the orientation of v.
The perpendiculars are drawn from the point (αx, αy αz) to the
coordinate axes, as shown in figure. The three direction angles- Øx,
Øy, Øz -are the angles between the line segment (or v) and the axes.
The direction cosines are given by
Figure shows that the effect of the desired rotation on the point (αx, αy
αz) is to rotate the line segment into the plane y = 0. From the figure,
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 10 of 16
Ry can be computed in a similar manner. Figure shows the rotation.
Note that this angle is clockwise about the y axis, and care is needed
for the sign of the sine terms in the matrix, which is
But Ry(-Ѳy) is performed and hence
Further, Rz(Ѳz) is computed.
Finally all the matrices are concatenated to find
OpenGL Transformation Matrices
OpenGL implements homogeneous-coordinate transformation and provides interface to the
user. In OpenGL, there are three matrices that are part of the state. Here only the model-view
matrix is used. All three types are manipulated by a common set of functions, and
glMatrixMode function is used to select the matrix to which the operations apply.
The Current Transformation Matrix (CTM) It is the matrix that is applied to any
vertex that is defined subsequent to its setting. If the CTM is changed, the state of the system is
changed. The CTM is part of the pipeline shown below:
Thus, if p is a vertex, the pipeline produces Cp. The CTM is a 4 x 4 matrix; it can be altered by a
set o functions provided by the graphics package. Let C denote the CTM. Initially, it is set to the
4 x 4 identity matrix; it can be reinitialized as needed. Let the symbol  denotes replacement.
Then this initialization operation can be written as
C  I.
The functions that alter C are of two forms:
 those that reset it to some matrix, and
 those that modify it by pre-multiplication or post-multiplication by a matrix.
The three transformations supported in most systems are translation, scaling with a fixed point
of the origin, and rotation with a fixed point of the origin.
Symbolically, these operations in post-multiplication are:
C  CT, C  CS, C  CR,
and in set form as
C  T, C  S, C  R.
CTM can be set directly, or loaded with an arbitrary matrix, or post-multiplied by an arbitrary
matrix M:
C  M, C  CM.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 11 of 16
Rotation, Translation, and Scaling
In OpenGL, the matrix that is applied to all primitives is the product of the model-view matrix
(GL_MODELVIEW) and the projection matrix (GL_PROJECTION). CTM can be considered
the product of these matrices.
and each can be manipulated individually by selecting the desired matrix by glMatrixMode.
A matrix can be with the function
glLoadMatrixf(pointer_to_matrix);
or a matrix can be set to the identity matrix with the function
glLoadIdentity( );
Arbitrary 4 x 4 matrices can be specified by a pointer to a one-dimensional array of 16 entries
organized by the columns of the desired matrix. The selected matrix can be altered with
glMultMatrixf(pointer_to_matrix).
Rotation, translation, and scaling are provided through the three functions
glRotatef(angle, vx, vy, vz);
glTranslatef(dx, dy, dz);
glScalef(sx ,sy, sz);
All three alter the selected matrix by post-multiplication. For rotation, the angle is specified in
degrees, and the variables vx, vy, and vz are the components of a vector about which rotation is
to done. In the translation function, the variables are the components of the displacement
vector; for scaling, the variables determine the scale factors along the coordinate axes.
Rotation about a Fixed Point in OpenGL
Rotation about a fixed point, other than the origin, can be done by first moving the fixed point
to the origin, then rotating about the origin, and finally moving the fixed point back to its
original location.
The following sequence sets the matrix mode, then forms the required matrix for a 45-degree
rotation about the line through the origin and the point (1,2, 3) with a fixed point of (4,5,6):
glMatrixMode(GL_MODELVIEW);
glLoadldentity( );
glTranslatef(4.0, 5.0, 6.0);
glRotatef(45.0, 1.0, 2.0, 3.0);
glTranslatef(-4.0, -5.0, -6.0);
Note that it is not required to form the rotation matrix about an arbitrary axis.
Order of Transformations
Note that the function calls are apparent in the reverse order. The rule in OpenGL is this: The
transformation specified most recently is the one applied first. This order is correct and is a
consequence of multiplying the CTM on the right by the specified affine transformation. The
sequence of specified operations is
C  I,
C  CT(4.0, 5.0, 6.0),
C  CR(45.0, 1.0, 2.0, 3.0),
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 12 of 16
C  CT(-4.0, -5.0, -6.0).
In each step, at the end of the existing CTM, CTM is post-multiplied, forming the matrix
C = T(4.0, 5.0, 6.0)R(45.0, 1.0,2.0, 3.0)T(-4.0, -5.0, -6.0),
Each vertex p that is specified after the model-view matrix has been set, will be multiplied by C,
thus forming the new vertex q=Cp.
There are other ways to think about the order of operations. One way is in terms of a stack.
Altering the CTM is similar to pushing matrices onto a stack; when final transformation is
applied, the matrices are popped off the stack in the reverse of the order they were placed
there. The analogy is conceptual, rather than exact, because, when a transformation function is
called, the matrix is altered immediately. However, OpenGL provides stacks to store matrices.
When discussing hierarchical modeling (in Chapter 8), the following operations are needed
glPushMatrix( );
glPopMatrix( );
to traverse the data structures.
Spinning of the Cube
Assume that the cube defined earlier is to be rotated using the three buttons of the mouse.
Three callback functions defined are:
glutDisplayFunc(display);
glutldleFunc(spincube);
glutMouseFunc(mouse);
The function displayfirst sets a model-view matrix using the values of three angles
determined by the mouse callback. It then draws a cube, using the colorcube function
(discussed earlier). This example uses double buffering. Each time that display is called, it
starts by clearing the frame buffer and the depth buffer-for hidden-surface removal; it finishes
with a buffer swap.
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity( );
glRotatef(theta[0], 1.0, 0.0, 0.0);
glRotatef(theta[1l, 0.0, 1.0, 0.0);
glRotatef(theta[2], 0.0, 0.0, 1.0);
colorcube( );
glutSwapBuffers( );
}
The mouse callback selects the axis for rotation:
void mouse(int btn, int state, int x, int y)
{
if (btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) axis = 0;
if (btn==GLUT_MIDDLE_BUTTON && state== GLUT_DOWN) axis= 1;
if (btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2;
}
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 13 of 16
The idle callback increments the angle associated with the chosen axis by 2 degrees each time:
void spinCube()
{
theta[axis] += 2.0;
if ( theta[axis] > 360.0 ) theta[axis] -= 360.0;
glutPostRedisplay( );
}
Program can be terminated using the keyboard with the simple keyboard callback
void mykey(char key, int mousex, int mousey)
{
if( key =='q' || key == 'Q') exit( );
}
Hidden-surface removal is not discussed until Chapter 5, but note here that using it in OpenGL
is almost trivial because it requires only the depth buffer need to be cleared and the function is
to be enabled by glEnab1e(GL_DEPTH_TEST).
Loading, Pushing, and Popping Matrices
For most purposes, the rotation, translation, and scaling can be used to form a desired
transformation matrix. In some circumstances, however, such as forming a shear matrix, it is
easier to set up the matrix directly. A 4 x 4 homogeneous-coordinate matrix can be loaded as
the current matrix, in the same way an identity matrix is loaded, by
glLoadMatrixf(myarray)
Right of the current matrix can be multiplied by a user-defined matrix, using the function
glMultMatrixf(myarray)
myarray is a one-dimensional array of 16 elements arranged by columns.
Thus, if 4 x 4 matrix m is to be multiplied, then myarray can be formed by
GLfloat m[4][4];
GLfloat myarray[16];
for(i=0; i<3; i++) for(j=0; j<3; j++)
myarray[4*j+i]= m[i][j];
Sometimes a transformation is needed to be performed and then returning to the same state
as before its execution is required. This situation occurs when an instance transformation is to
be performed that applies to a particular object and does not apply to the following objects in
the code. Rather than re-compute the transformation that existed before the instance
transformation, the transformation matrix can be pushed on a stack with glPushMatrix
before multiplying by the instance transformation and later it is recovered with glPopMatrix.
Thus, the following sequence is seen often:
glPushMatrix( );
glTrans1atef(. . .);
glRotatef(. . .);
glSca1ef(. . .);
/* draw object here */
glPopMatrix( );
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 14 of 16
Interfaces to Three-Dimensional Applications
GLUT allows using the keyboard in combination with the mouse. E.g. Left mouse button can be
used for a forward rotation about the x axis and the control key in combination with the left
mouse button for a backward rotation about the x axis. There are other options that provide a
more interesting interaction. Two of them are considered below.
Using Areas of the Screen
Suppose it is required that one mouse button need to be used for orienting an object, one for
getting closer to or farther from the object, and one for translating the object to the left or
right. motion callback can be used to achieve all these functions. The callback returns which
button has been activated and where the mouse is located. The location of the mouse can be
used to control how fast and in which direction to rotate or translate, and to move in or out.
Note that rotating about only two axes determine any orientation. Then the left mouse button
and the mouse position can be used to control orientation. The distance from the center of the
screen can be used to control the x and y rotations. Thus, if the left mouse button is held down
but the mouse is located in the center of the screen, there will be no rotation; if the mouse is
moved up, the object will be rotated about the y-axis in a clockwise manner; if the mouse is
moved down, the object will be rotated about the y axis in a counterclockwise manner.
Likewise, motion to the right or left will cause rotation about the x axis. The distance from the
center can control the speed of rotation. Motion toward the corners can cause simultaneous
rotations about the x and y axes.
Using the right mouse button in a similar manner, the object can be translated right to left and
up to down. The middle mouse button can be used to move the object toward or away from
the viewer by having the mouse position control a translation in the z direction.
The code for such an interface is straightforward in GLUT; it is left as an exercise.
A Virtual Trackball
The use of the mouse position to control rotation about two axes provides most of the
functionality of a trackball. By extending one step further, a graphical or virtual trackball can be
created using the mouse and the screen.
Benefit of such a device: A frictionless trackball can be created that, once started rotating, will
continue to rotate until stopped by the user.
Thus, the device will support continuous rotations of objects but will still allow changes in the
speed and orientation of the rotation. The same could be done for translation and other
parameters which can be controlled from the mouse.
Step 1: The position of a trackball is mapped to that of a mouse.
Consider the trackball in figure. Assume that the ball has a radius
of 1 unit. A position on its surface can be mapped to the plane y
= 0 by doing an orthogonal projection to the plane, as shown
below.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 15 of 16
The position (x, y, z) on the surface of the ball is mapped to (x, 0, z) on the plane. This projection
is reversible because 3-D point that is projected to the point on the plane must satisfy the
equation of the sphere x2 +y2 + z2 = 1. Thus, given the point on the plane (x, 0, z), the
corresponding point on the hemisphere must be (x, y, z), where
.
The 3-D information can be computed and it can be tracked as the mouse moves.
Step 2: Assuming the two positions on the hemisphere p1 and p2; then, the vectors from the
origin to these points determine the orientation of a plane, as in figure below, whose normal is
defined by their cross product n = p1 x p2.
The motion of the trackball that moves from p1 to p2
can be achieved by a rotation about n. The angle of
rotation is the angle between the vectors p1 and p2,
which can be computed using the magnitude of the
cross product. Because both p1 and p2 have unit
length,
| sinθ | = | n |.
If the mouse is to be tracked at a high rate, then the
detected change in positions will be small; rather than
use an inverse trigonometric function to find θ, an approximation, such as sinθ ≈ θ can be
used.
The virtual trackball can be implemented through the use of idle, motion, and mouse
callbacks in GLUT. This process can be thought of in terms of three logical variables or flags that
control the tracking of the mouse and of the display redrawing. These are set initially as
bool trackingMouse = false;
bool trackballMove = false;
bool redrawContinue = false;
If redrawContinue is true, the idle function posts a redisplay. If trackingMouse is true, the
trackball position can be updated as part of the motion callback. If trackballMove is true, the
rotation matrix used in the display routine can be updated.
Smooth Rotations
The trackball example illustrates a problem with the method of computing rotations. The
approach for orienting objects is based on angles (the Euler angles) measured with respect to
three coordinate axes. This perspective led to forming rotation matrices by concatenating
simple rotations about the x, y, and z axes to obtain a desired rotation about an arbitrary axis.
www.bookspar.com
www.Bookspar.com | Website for Students | VTU - Notes - Question Papers
Page 16 of 16
Although OpenGL allows rotating about an arbitrary axis, the concatenation strategy is usually
employed to determine this axis and the corresponding angle of rotation.
Consider what happens if it is needed to move between two orientations as part of an
animation. An appropriate rotation matrix can be determined as the product of rotations about
the three axes,
If a sequence of images that move between the two orientations need to be created, the
individual angles can be changed in small increments, either individually or simultaneously.
Such a sequence would not appear smooth to a viewer i.e. the rotations about the three axes
would be distinctly detected by the user.
 With the trackball, the cube could be rotated directly from one orientation to another in
a smooth manner. This is done by exploiting the equivalence between the two
orientations of the cube and two points on a unit circle. A smooth rotation between the
two orientations corresponds to a great circle on the surface of the sphere. This circle
corresponds to a single rotation about a suitable axis that is the normal to the plane
determined by the two points on the sphere and that sphere's center. If this angle is
increased smoothly, the viewer will see a smooth rotation.
The failure in mathematical formulation is it relies on the use of a coordinate system.
Quaternions are an extension of complex numbers that provide an alternative method for
describing and manipulating rotations. Although less intuitive than original approach,
quaternions provide advantages for animation and hardware implementation of rotation.
www.bookspar.com
Download

www.Bookspar.com | Website for Students | VTU - Notes