370 likes | 542 Views
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.
E N D
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
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.
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
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 = 5 3 4 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 x 0 0 0 0 0 0 1/k 1 Cos α 0 sin α 0 0 1 0 m -sin α 0 cos α n 0 0 0 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 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 -sin0 x sin cos0 · 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