Transcript Chapter 4

Chapter 4
10 February 2004
Agenda
Program 2 – Due 2/17
 Chapter 4 – transformations
 GLUT solids

OpenGL Buffers

Color
– can be divided into front and back for
double buffering
Alpha
 Depth
 Stencil
 Accumulation

Double Buffering
Animating Using Double
Buffering

Request a double buffered color buffer
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE);

Clear color buffer
– glClear(GL_COLOR_BUFFER_BIT);

Render Scene
 Request swap of front and back buffers
– glutSwapBuffers();

Repeat steps 2-4 for animation.
Depth Buffering
3D Coords --> Raster coords
Transformations
 Clipping
 Viewport transformation.

Transformations

Prior to rendering: view, locate and
orient
– eye / camera position
– 3D geometry

Manage the matrices
– including the matrix stack

Combine (composite) transformations
Camera
Analogy
Stages of Vertex Transformation
Transformations
45-degree counterclockwise rotation
about the origin around the z-axis
 a translation down the x-axis

Order of transformations
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(N);
/* apply transformation N */
glMultMatrixf(M);
/* apply transformation M */
glMultMatrixf(L);
/* apply transformation L */
glBegin(GL_POINTS);
glVertex3f(v);
/* draw transformed vertex v */
glEnd();

transformed vertex is NMLv
Translation

void glTranslate{fd}
(TYPE x, TYPE y,
TYPE z);

Multiplies the current
matrix by a matrix that
moves (translates) an
object by the given x, y,
and z values
Rotation
 void
glRotate{fd}(TYPE
angle, TYPE x, TYPE y,
TYPE z);

Multiplies the current matrix by a matrix that
rotates an object in a counterclockwise
direction about the ray from the origin through
the point (x, y, z). The angle parameter
specifies the angle of rotation in degrees.
Scale

void glScale{fd} (TYPEx, TYPE
y, TYPEz);

Multiplies the current matrix by a matrix
that stretches, shrinks, or reflects an
object along the axes.
Vectors

N tuple of real numbers (n = 2 for 2D, n = 3
for 3D)
 Directed line segment
 Example
– Velocity vector (speed and direction)

Operations
– Addition
– Multiplication by a scalar
– Dot product
Vectors
1
2
3
+
2
3
4
3
= 5
7
1
3
1
Matrices
Rectangular array of numbers
 A vector in 3 space is a n x 1 matrix or
column vector.
 Multiplication

1
0
0
0
0
1
0
0
0
0
0
1/k
0
0
0
1
x
Cos α
0
-sin α
0
0
1
0
0
sin α
0
cos α
0
0
m
n
1
Matrix Multiplication
A is an n x m matrix with entries aij
 B is an m x p matrix with entries bij
 AB is an n x p matrix with entries cij

m
 cij = ais bsj
s=1
2D Transformations

Translation: Pf = T + P
xf = xo + dx
yf = yo + dy

Rotation: Pf = R · P
xf = xo * cos - yo *sin
yf = xo * sin + yo *cos

Scale: Pf = S · P
xf = sx * xo
yf = sy * yo
Homogeneous Coordinates





Want to treat all transforms in a consistent
way so they can be combined easily
Developed in geometry (‘46 in cambridge)
and applied to graphics
Add a third coordinate to a point (x, y, w)
(x1, y1, w1) is the same point as (x2, y2, w2)
if one is a multiple of another
Homogenize a point by dividing by w
Homogeneous Coordinates
1
0
0
0
1
0
dx
dy
1
·
x
y
1
Homogeneous Coordinates
sx
0
0
0
sy
0
0
0
1
·
x
y
1
Homogeneous Coordinates
Cos
sin
0
-sin
cos
0
0
0
1
·
x
y
1
Combining 2D Transformations
Rotate a house about the origin
 Rotate the house about one of its
corners

– translate so that a corner of the house is at
the origin
– rotate the house about the origin
– translate so that the corner returns to its
original position
GLUT Solids









Sphere
Cube
Cone
Torus
Dodecahedron
Octahedron
Tetrahedron
Icosahedron
Teapot
glutSolidSphere and glutWireSphere
void glutSolidSphere(GLdouble
radius, GLint slices, GLint
stacks);
 radius - The radius of the sphere.
 slices - The number of subdivisions around
the Z axis (similar to lines of longitude).
 stacks - The number of subdivisions along
the Z axis (similar to lines of latitude).

glutSolidCube and
glutWireCube
void glutSolidCube(GLdouble
size);
 size – length of sides

glutSolidCone and
glutWireCone





void glutSolidCone(GLdouble base,
GLdouble height, GLint slices,
GLint stacks);
base - The radius of the base of the cone.
height - The height of the cone.
slices - The number of subdivisions around
the Z axis.
stacks - The number of subdivisions along the
Z axis.
glutSolidTorus and
glutWireTorus





void glutSolidTorus(GLdouble
innerRadius,GLdouble outerRadius,
GLint nsides, GLint rings);
innerRadius - Inner radius of the torus.
outerRadius - Outer radius of the torus.
nsides - Number of sides for each radial
section.
rings - Number of radial divisions for the
torus.
glutSolidDodecahedron and
glutWireDodecahedron

void glutSolidDodecahedron(void);
glutSolidOctahedron and
glutWireOctahedron .

void
glutSolidOctahedron(void);
glutSolidTetrahedron and
glutWireTetrahedron

void
glutSolidTetrahedron(void);
glutSolidIcosahedron and
glutWireIcosahedron

void glutSolidIcosahedron(void);
glutSolidTeapot and
glutWireTeapot
void glutSolidTeapot(GLdouble
size);
 size - Relative size of the teapot.

Homework for next week.
Program 2 due 2/17
 Study for Test on Chapters 1-4, 2/19
