Intro to 3D Models Angel 4.1-4.3 Angel: Interactive Computer Graphics5E © Addison-Wesley 2009 1 Objectives • Introduce the elements of geometry – Scalars – Vectors – Points • Develop mathematical operations among them in a coordinate-free manner • Define basic primitives – Line segments – Polygons Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 2 Basic Elements • Geometry is the study of the relationships among objects in an n-dimensional space – In computer graphics, we are interested in objects that exist in three dimensions • Want a minimum set of primitives from which we can build more sophisticated objects • We will need three basic elements – Scalars – Vectors – Points Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 3 Geometric Objects Angel: Interactive Computer Graphics5E © Addison-Wesley 2009 4 Coordinate-Free Geometry • When we learned simple geometry, most of us started with a Cartesian approach – Points were at locations in space p=(x,y,z) – We derived results by algebraic manipulations involving these coordinates • This approach was nonphysical – Physically, points exist regardless of the location of an arbitrary coordinate system – Most geometric results are independent of the coordinate system – Example Euclidean geometry: two triangles are identical if two corresponding sides and the angle between them are identical Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 5 Coordinate Independence Angel: Interactive Computer Graphics5E © Addison-Wesley 2009 6 Scalars • Need three basic elements in geometry – Scalars, Vectors, Points • Scalars can be defined as members of sets which can be combined by two operations (addition and multiplication) obeying some fundamental axioms (associativity, commutivity, inverses) • Examples include the real and complex number systems under the ordinary rules with which we are familiar • Scalars alone have no geometric properties Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 7 Vectors • Physical definition: a vector is a quantity with two attributes – Direction – Magnitude • Examples include – Force – Velocity – Directed line segments v • Most important example for graphics • Can map to other types Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 8 Vector Operations • Every vector has an inverse – Same magnitude but points in opposite direction • Every vector can be multiplied by a scalar • There is a zero vector – Zero magnitude, undefined orientation • The sum of any two vectors is a vector – Use head-to-tail axiom v -v v w v u Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 9 Linear Vector Spaces • Mathematical system for manipulating vectors • Operations – Scalar-vector multiplication u=v – Vector-vector addition: w=u+v • Expressions such as – v=u+2w-3r • Make sense in a vector space Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 10 Vectors Lack Position • These vectors are identical – Same length and magnitude • Vectors spaces insufficient for geometry – Need points Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 11 Points • Location in space • Operations allowed between points and vectors – Point-point subtraction yields a vector – Equivalent to point-vector addition v=P-Q P=v+Q Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 12 Affine Spaces • Point + a vector space • Operations – Vector-vector addition – Scalar-vector multiplication – Point-vector addition – Scalar-scalar operations • For any point define –1•P=P – 0 • P = 0 (zero vector) Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 13 Lines • Consider all points of the form – P(a)=P0 + a d – Set of all points that pass through P0 in the direction of the vector d Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 14 Parametric Form • This form is known as the parametric form of the line – More robust and general than other forms – Extends to curves and surfaces • Two-dimensional forms – Explicit: y = mx +h – Implicit: ax + by +c =0 – Parametric: – x() = x0 + (1- )x1 – y() = y0 + (1- )y1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 15 Rays and Line Segments • If >= 0, then P() is the ray leaving P0 in the direction d • If we use two points to define v, then P() = Q + (R-Q)= Q + v = R + (1- )Q • For 0 ≤ ≤ 1 we get all the points on the line segment joining R and Q Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 16 Convexity • An object is convex iff for any two points in the object all points on the line segment between these points are also in the object P P Q convex Q not convex Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 17 Affine Sums • Consider the “sum” P=a1P1+a2P2+…..+anPn • Can show by induction that this sum makes sense iff a1+a2+…..an=1 • in which case we have the affine sum of the points P1,P2,…..Pn • If, in addition, ai>=0, we have the convex hull of P1,P2,…..Pn Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 18 Convex Hull • Smallest convex object containing P1,P2,…..Pn • Formed by “shrink wrapping” points Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 19 Curves and Surfaces • Curves are one parameter entities of the form P(a) where the function is nonlinear • Surfaces are formed from twoparameter functions P(a, b) – Linear functions give planes and polygons P() P(, b) Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 20 Planes • A plane can be defined by a point and two vectors or by three points P v Q R u P(,b)=R+u+bv R P(,b)=R+(Q-R)+b(P-Q) Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 21 Triangles convex sum of S() and R convex sum of P and Q for 0<=,b<=1, we get all points in triangle Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 22 Normals • Every plane has a vector n normal (perpendicular, orthogonal) to it • From point-two vector form P(a,b)=R+au+bv, we know we can use the cross product to find n = u v and the equivalent form (P(a)-P) n=0 v P u Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 23 REPRESENTATION Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 24 Objectives • Introduce concepts such as dimension and basis • Introduce coordinate systems for representing vectors spaces and frames for representing affine spaces • Discuss change of frames and bases • Introduce homogeneous coordinates Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 25 Linear Independence • A set of vectors v1, v2, …, vn is linearly independent if a1v1+a2v2+.. An vn=0 iff a1=a2=…=0 • If a set of vectors is linearly independent, we cannot represent one in terms of the others • If a set of vectors is linearly dependent, as least one can be written in terms of the others Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 26 Dimension • In a vector space, the maximum number of linearly independent vectors is fixed and is called the dimension of the space • In an n-dimensional space, any set of n linearly independent vectors form a basis for the space • Given a basis v1, v2,…., vn, any vector v can be written as v=a1v1+ a2v2 +….+anvn where the {ai} are unique Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 27 Representation • Until now we have been able to work with geometric entities without using any frame of reference, such as a coordinate system • Need a frame of reference to relate points and objects to our physical world. – For example, where is a point? Can’t answer without a reference system – World coordinates – Camera coordinates Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 28 Coordinate Systems • Consider a basis v1, v2,…., vn • A vector is written v=a1v1+ a2v2 +….+anvn • The list of scalars {a1, a2, …. an} is the representation of v with respect to the given basis • We can write the representation as a row or column array of scalars 1 a=[1 2 …. 2 T n] = . n Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 29 Example • v=2v1+3v2-4v3 • a=[2 3 –4]T • Note that this representation is with respect to a particular basis • For example, in OpenGL we start by representing vectors using the object basis but later the system needs a representation in terms of the camera or eye basis Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 30 Coordinate Systems • Which is correct? v v • Both are because vectors have no fixed location Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 31 Frames • A coordinate system is insufficient to represent points • If we work in an affine space we can add a single point, the origin, to the basis vectors to form a frame v2 v1 P0 v3 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 32 Representation in a Frame • Frame determined by (P0, v1, v2, v3) • Within this frame, every vector can be written as • v=a1v1+ a2v2 +….+anvn • Every point can be written as • P = P0 + b1v1+ b2v2 +….+bnvn Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 33 Confusing Points and Vectors • Consider the point and the vector P = P0 + b1v1+ b2v2 +….+bnvn v=a1v1+ a2v2 +….+anvn • They appear to have the similar representations p=[b1 b2 b3] v=[a1 a2 a3] • which confuses the point with the vector • A vector has no position v p v Vector can be placed anywhere point: fixed Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 34 A Single Representation • If we define 0•P = 0 and 1•P =P then we can write v = a1v1+ a2v2 +a3v3 = [a1 a2 a3 0 ] [v1 v2 v3 P0] T P = P0 + b1v1+ b2v2 +b3v3 = [b1 b2 b3 1 ] [v1 v2 v3 P0] T • Thus we obtain the four-dimensional homogeneous coordinate representation v = [a1 a2 a3 0 ] T P = [b1 b2 b3 1 ] T Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 35 Homogeneous Coordinates • The homogeneous coordinates form for a three dimensional point [x y z] is given as • p =[x’ y’ z’ w] T =[wx wy wz w] T • We return to a three dimensional point (for w0) by xx’/w yy’/w zz’/w • If w=0, the representation is that of a vector • Note that homogeneous coordinates replaces points in three dimensions by lines through the origin in four dimensions • For w=1, the representation of a point is [x y z 1] Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 36 Homogeneous Coordinates and Computer Graphics • Homogeneous coordinates are key to all computer graphics systems – All standard transformations (rotation, translation, scaling) can be implemented with matrix multiplications using 4 x 4 matrices – Hardware pipeline works with 4 dimensional representations – For orthographic viewing, we can maintain w=0 for vectors and w=1 for points – For perspective we need a perspective division Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 37 Change of Coordinate Systems • Consider two representations of a the same vector with respect to two different bases. The representations are a=[1 2 3 ] b=[b1 b2 b3] where v=1v1+ 2v2 +3v3 = [1 2 3] [v1 v2 v3] T =b u + b u +b u = [b b b ] [u u u ] T 1 1 2 2 3 3 1 2 3 1 2 3 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 38 Representing second basis in terms of first • Each of the basis vectors, u1,u2, u3, are vectors that can be represented in terms of the first basis u1 = g11v1+g12v2+g13v3 u2 = g21v1+g22v2+g23v3 u3 = g31v1+g32v2+g33v3 v Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 39 Matrix Form • The coefficients define a 3 x 3 matrix g g g g M = g g g g g 33 • and the bases can be related by a=MTb • see text for numerical examples Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 40 Change of Frames • We can apply a similar process in homogeneous coordinates to the representations of both points and vectors u1 v2 Consider two frames: Q0 (P0, v1, v2, v3) (Q0, u1, u2, u3) P0 v 1 v3 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 u2 u3 41 Representing One Frame in Terms of the Other Extending what we did with change of bases u1 = g11v1 + g12v2 + g13v3 u2 = g21v1 + g22v2 + g23v3 u3 = g31v1 + g32v2 + g33v3 Q0 = g41v1 + g42v2 + g43v3 + g44P0 defining a 4 x 4 matrix g g g g M= g g g g g g g g Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 42 Working with Representations • Within the two frames any point or vector has a representation of the same form a=[a1 a2 a3 a4 ] in the first frame b=[b1 b2 b3 b4 ] in the second frame • where a4 = b4 = 1 for points and a4 = b4 = 0 for vectors and a=MTb • The matrix M is 4 x 4 and specifies an affine transformation in homogeneous coordinates Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 43 Affine Transformations • Every linear transformation is equivalent to a change in frames • Every affine transformation preserves lines • However, an affine transformation has only 12 degrees of freedom because 4 of the elements in the matrix are fixed and are a subset of all possible 4 x 4 linear transformations Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 44 Frames & Geometry Angel 4.4-4.5 Angel: Interactive Computer Graphics5E © Addison-Wesley 2009 45 Objectives • Discuss frames • Introduce simple data structures for building polygonal models – Vertex lists – Edge lists • OpenGL vertex arrays Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 46 Homogeneous Coordinates • The homogeneous coordinates form for a three dimensional point [x y z] is given as • p =[x’ y’ z’ w] T =[wx wy wz w] T • We return to a three dimensional point (for w0) by xx’/w yy’/w zz’/w • If w=0, the representation is that of a vector • Note that homogeneous coordinates replaces points in three dimensions by lines through the origin in four dimensions • For w=1, the representation of a point is [x y z 1] Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 47 Homogeneous Coordinates and Computer Graphics • Homogeneous coordinates are key to all computer graphics systems – All standard transformations (rotation, translation, scaling) can be implemented with matrix multiplications using 4 x 4 matrices – Hardware pipeline works with 4 dimensional representations – For orthographic viewing, we can maintain w=0 for vectors and w=1 for points – For perspective we need a perspective division Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 48 Change of Coordinate Systems • Consider two representations of a the same vector with respect to two different bases. The representations are a=[1 2 3 ] b=[b1 b2 b3] where v=1v1+ 2v2 +3v3 = [1 2 3] [v1 v2 v3] T =b u + b u +b u = [b b b ] [u u u ] T 1 1 2 2 3 3 1 2 3 1 2 3 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 49 Representing second basis in terms of first • Each of the basis vectors, u1,u2, u3, are vectors that can be represented in terms of the first basis u1 = g11v1+g12v2+g13v3 u2 = g21v1+g22v2+g23v3 u3 = g31v1+g32v2+g33v3 v Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 50 Matrix Form • The coefficients define a 3 x 3 matrix g g g g M = g g g g g 33 • and the bases can be related by a=MTb • see text for numerical examples Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 51 Change of Frames • We can apply a similar process in homogeneous coordinates to the representations of both points and vectors u1 v2 Consider two frames: Q0 (P0, v1, v2, v3) (Q0, u1, u2, u3) P0 v 1 v3 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 u2 u3 52 Representing One Frame in Terms of the Other Extending what we did with change of bases u1 = g11v1 + g12v2 + g13v3 u2 = g21v1 + g22v2 + g23v3 u3 = g31v1 + g32v2 + g33v3 Q0 = g41v1 + g42v2 + g43v3 + g44P0 defining a 4 x 4 matrix g g g g M= g g g g g g g g Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 53 Working with Representations • Within the two frames any point or vector has a representation of the same form a=[a1 a2 a3 a4 ] in the first frame b=[b1 b2 b3 b4 ] in the second frame • where a4 = b4 = 1 for points and a4 = b4 = 0 for vectors and a=MTb • The matrix M is 4 x 4 and specifies an affine transformation in homogeneous coordinates Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 54 Affine Transformations • Every linear transformation is equivalent to a change in frames • Every affine transformation preserves lines • However, an affine transformation has only 12 degrees of freedom because 4 of the elements in the matrix are fixed and are a subset of all possible 4 x 4 linear transformations Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 55 The World and Camera Frames • When we work with representations, we work with n-tuples or arrays of scalars • Changes in frame are then defined by 4 x 4 matrices • In OpenGL, the base frame that we start with is the world frame • Eventually we represent entities in the camera frame by changing the world representation using the model-view matrix • Initially these frames are the same (M=I) Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 56 Moving the Camera • If objects are on both sides of z=0, we must move camera frame M= 1 0 0 0 0 0 0 1 0 0 0 1 d 0 0 1 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 57 GEOMETRIC MODELING Angel: Interactive Computer Graphics5E © Addison-Wesley 2009 58 Representing a Mesh • Consider a mesh e2 v6 e1 v1 e6 v5 e3 e8 v e9 v4 8 e11 e10 e4 e7 v7 v2 e12 e5 v3 • There are 8 nodes and 12 edges – 5 interior polygons – 6 interior (shared) edges • Each vertex has a location vi = (xi yi zi) Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 59 Simple Representation • Define each polygon by the geometric locations of its vertices • Leads to OpenGL code such as glBegin(GL_POLYGON); glVertex3f(x1, y1, z1); glVertex3f(x6, y6, z6); glVertex3f(x7, y7, z7); glEnd(); • Inefficient and unstructured – Consider moving a vertex to a new location – Must search for all occurrences Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 60 Inward and Outward Facing Polygons • The order {v1, v6, v7} and {v6, v7, v1} are equivalent in that the same polygon will be rendered by OpenGL but the order {v1, v7, v6} is different • The first two describe outwardly facing polygons • Use the right-hand rule = counter-clockwise encirclement of outward-pointing normal • OpenGL can treat inward and outward facing polygons differently Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 61 Geometry vs Topology • Generally it is a good idea to look for data structures that separate the geometry from the topology – Geometry: locations of the vertices – Topology: organization of the vertices and edges – Example: a polygon is an ordered list of vertices with an edge connecting successive pairs of vertices and the last to the first – Topology holds even if geometry changes Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 62 Vertex Lists • Put the geometry in an array • Use pointers from the vertices into this array • Introduce a polygon list P1 P2 P3 P4 P5 topology v1 v7 v6 v8 v5 v6 x 1 y 1 z1 x 2 y 2 z2 x 3 y 3 z3 x 4 y 4 z4 x5 y5 z5. x 6 y 6 z6 x 7 y 7 z7 geometry x8 y8 z8 Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 63 Shared Edges • Vertex lists will draw filled polygons correctly but if we draw the polygon by its edges, shared edges are drawn twice • Can store mesh by edge list Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 64 Edge List e2 e1 e2 e3 e4 e5 e6 e7 e8 e9 v1 v6 x 1 y 1 z1 x 2 y 2 z2 x 3 y 3 z3 x 4 y 4 z4 x5 y5 z5. x 6 y 6 z6 x 7 y 7 z7 x 8 y 8 z8 v6 e1 v1 e6 v5 e3 e8 v e9 8 e11 e10 e4 e7 v7 v2 e12 e5 v3 Note polygons are not represented Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 65 Modeling a Cube Model a color cube for rotating cube program Define global arrays for vertices and colors GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0}, {1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}}; GLfloat colors[][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0}, {1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}, {1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}}; Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 66 Drawing a polygon from a list of indices • Draw a quadrilateral from a list of indices into the array vertices and use color corresponding to first index void polygon(int a, int b, int c , int d) { glBegin(GL_POLYGON); glColor3fv(colors[a]); glVertex3fv(vertices[a]); glVertex3fv(vertices[b]); glVertex3fv(vertices[c]); glVertex3fv(vertices[d]); glEnd(); } Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 67 Draw cube from faces void colorcube( ) { polygon(0,3,2,1); polygon(2,3,7,6); polygon(0,4,7,3); polygon(1,2,6,5); polygon(4,5,6,7); polygon(0,1,5,4); } 5 6 2 1 7 4 0 3 Note that vertices are ordered so that we obtain correct outward facing normals Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 68 Efficiency • The weakness of our approach is that we are building the model in the application and must do many function calls to draw the cube • Drawing a cube by its faces in the most straight forward way requires – – – – 6 glBegin, 6 glEnd 6 glColor 24 glVertex More if we use texture and lighting Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 69 Vertex Arrays • OpenGL provides a facility called vertex arrays that allows us to store array data in the implementation • Six types of arrays supported – – – – – – Vertices Colors Color indices Normals Texture coordinates Edge flags • We will need only colors and vertices Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 70 Initialization • Using the same color and vertex data, first we enable glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); • Identify location of arrays glVertexPointer(3, GL_FLOAT, 0, vertices); 3d arrays stored as floats data array data contiguous glColorPointer(3, GL_FLOAT, 0, colors); Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 71 Mapping indices to faces • Form an array of face indices GLubyte cubeIndices[24] = {0,3,2,1,2,3,7,6 0,4,7,3,1,2,6,5,4,5,6,7,0,1,5,4}; • Each successive four indices describe a face of the cube • Draw through glDrawElements which replaces all glVertex and glColor calls in the display callback Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 72 Drawing the cube • Method 1: what to draw number of indices for(i=0; i<6; i++) glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &cubeIndices[4*i]); format of index data start of index data • Method 2: glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubeIndices); Draws cube with 1 function call!! Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009 73