Upload
edwina-chase
View
217
Download
3
Embed Size (px)
Citation preview
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
transformed vertex is NMLv
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();
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 32 + 3 = 53 4 7
Matrices
Rectangular array of numbers A vector in 3 space is a n x 1 matrix or
column vector. Multiplication
1 0 0 00 1 0 0 x 0 0 0 00 0 1/k 1
Cos α 0 sin α 0 0 1 0 m-sin α 0 cos α n 0 0 0 1
131
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 + Pxf = 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 dx x
0 1 dy · y
0 0 1 1
Homogeneous Coordinates
sx 0 0 x
0 sy 0 · y
0 0 1 1
Homogeneous Coordinates
Cos -sin 0 x
sin cos 0 · y
0 0 1 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