440 likes | 634 Views
Geometric Objects and Transformations . Chapter 4. Points, Scalars and Vectors. Points - position in space Scalars - real numbers, complex numbers obey a set of rules that are abstractions of arithmetic store values such as distance Vectors - directed line segment . Vector Arithmetic.
E N D
Geometric Objects and Transformations Chapter 4
Points, Scalars and Vectors • Points - position in space • Scalars - real numbers, complex numbers obey a set of rules that are abstractions of arithmetic store values such as distance • Vectors - directed line segment
Vector Arithmetic • B = 2A • C = A + B • Head to tail rule • E = -A • Inverse • Zero vector = E + A
Point Arithmetic • Can’t add p1 + p2 = p3 • Can’t multiply p1 * 2 = p2 • What can you do to produce a 2nd point from a 1st? • p1 + V = p2 • V = p2 - p1
Important Vector Concepts • Normal Vector • A vector at a right angle to a surface. • Graphics Usage of Normal Vector • Used to figure out similarity of direction which is necessary for lighting • More precisely, how much light should fall on a surface is calculated by the similarity of the surface normal and the vector between the light source and the surface. • Similarity of direction = vector dot product
Vector Dot Product • For vectors of length 1 (unit vectors), the dot product is the length of the projection of one vector onto the other. • If the dot product = • 1: the vectors point in the same direction • 0: the vectors are at right angles • -1: the vectors point in opposite directions
Vector Cross Product • The cross product of two vectors A and B is another vector at right angles to the plane created by A and B
Defining a Coordinate Space • Need to know • The origin (or displacement vector) • The basis vectors - The direction and distance for +1 movement along each axis • This definition is relative • To plot a point • Begin at origin • Travel along the x basis vector [direction] scaled by x coord, then along the y basis vector scaled by the y coord, then finally along the z basis vector scaled by the z coord.
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 • 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 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 1 * x + 0 * y + dx * 1 0 * x + 1 * y + dy * 1 0 * x + 0 * y + 1 * 1
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
Homogeneous Coordinates 1 0 0 x x 0 1 0 · y = y 0 0 1 1 1 • Identity Maxtrix x point p = point p
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
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.
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 • Project part 2 due 2/19 • Turn in a program that, at a minimum, draws your initial scene.