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