Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 91.427 Computer Graphics I, Fall 2010 Building Models.

Similar presentations


Presentation on theme: "1 91.427 Computer Graphics I, Fall 2010 Building Models."— Presentation transcript:

1 1 91.427 Computer Graphics I, Fall 2010 Building Models

2 2 91.427 Computer Graphics I, Fall 2010 Objectives Introduce simple data structures for building polygonal models ­Vertex lists ­Edge lists OpenGL vertex arrays

3 3 91.427 Computer Graphics I, Fall 2010 Representing a Mesh Consider a mesh 8 nodes and 12 edges ­5 interior polygons ­6 interior (shared) edges Each vertex has location v i = (x i y i z i ) v1v1 v2v2 v7v7 v6v6 v8v8 v5v5 v4v4 v3v3 e1e1 e8e8 e3e3 e2e2 e 11 e6e6 e7e7 e 10 e5e5 e4e4 e9e9 e 12

4 4 91.427 Computer Graphics I, Fall 2010 Simple Representation Define each polygon by geometric locations of vertices Leads to OpenGL code such as Inefficient and unstructured ­Consider moving vertex to new location ­Must search for all occurrences glBegin(GL_POLYGON); glVertex3f(x1, y1, z1); glVertex3f(x6, y6, z6); glVertex3f(x7, y7, z7); glEnd();

5 5 91.427 Computer Graphics I, Fall 2010 Inward and Outward Facing Polygons Order {v 1, v 6, v 7 } and {v 6, v 7, v 1 } equivalent ==> same polygon rendered by OpenGL but {v 1, v 7, v 6 } different First two ==> outwardly facing polygons Use right-hand rule = counter-clockwise encirclement of outward-pointing normal OpenGL can treat inward and outward facing polygons differently

6 6 91.427 Computer Graphics I, Fall 2010 Geometry vs Topology Good idea to look for data structures that separate geometry from topology ­Geometry: locations of vertices ­Topology: organization of vertices and edges ­Example: polygon = ordered list of vertices edge connecting successive pairs of vertices last to first ­Topology holds even if geometry changes

7 7 91.427 Computer Graphics I, Fall 2010 Vertex Lists Put geometry in array Use pointers from vertices into this array Introduce polygon list x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 x 4 y 4 z 4 x 5 y 5 z 5. x 6 y 6 z 6 x 7 y 7 z 7 x 8 y 8 z 8 P1 P2 P3 P4 P5 v1v7v6v1v7v6 v8v5v6v8v5v6 topology geometry

8 8 91.427 Computer Graphics I, Fall 2010 Shared Edges Vertex lists will draw filled polygons correctly but if draw polygon by its edges ==> shared edges drawn twice Can store mesh by edge list

9 9 91.427 Computer Graphics I, Fall 2010 Edge List v1v1 v2v2 v7v7 v6v6 v8v8 v5v5 v3v3 e1e1 e8e8 e3e3 e2e2 e 11 e6e6 e7e7 e 10 e5e5 e4e4 e9e9 e 12 e1 e2 e3 e4 e5 e6 e7 e8 e9 x 1 y 1 z 1 x 2 y 2 z 2 x 3 y 3 z 3 x 4 y 4 z 4 x 5 y 5 z 5. x 6 y 6 z 6 x 7 y 7 z 7 x 8 y 8 z 8 v1 v6 Note polygons are not represented

10 10 91.427 Computer Graphics I, Fall 2010 Modeling a Cube 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}}; Model color cube for rotating cube program Define global arrays for vertices and colors

11 11 91.427 Computer Graphics I, Fall 2010 Drawing a polygon from a list of indices Draw quadrilateral from list of indices into 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(); }

12 12 91.427 Computer Graphics I, Fall 2010 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); } 0 56 2 4 7 1 3 Note that vertices are ordered so that obtain correct outward facing normals

13 13 91.427 Computer Graphics I, Fall 2010 Efficiency Weakness of approach: ­building model in application ­==> many function calls to draw cube Drawing cube by its faces in most straightforward way requires ­6 glBegin, 6 glEnd ­6 glColor ­24 glVertex ­More if use texture and lighting

14 14 91.427 Computer Graphics I, Fall 2010 Vertex Arrays OpenGL provides facility called vertex arrays ==> allows to store array data in implementation Six types of arrays supported ­Vertices ­Colors ­Color indices ­Normals ­Texture coordinates ­Edge flags Will need only colors and vertices

15 15 91.427 Computer Graphics I, Fall 2010 Initialization Using same color and vertex data, first enable glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_VERTEX_ARRAY); Identify location of arrays glVertexPointer(3, GL_FLOAT, 0, vertices); glColorPointer(3, GL_FLOAT, 0, colors); 3d arraysstored as floats data contiguous data array

16 16 91.427 Computer Graphics I, Fall 2010 Mapping indices to faces Form array of face indices Each successive four indices describe face of cube Draw through glDrawElements ==> replaces all glVertex and glColor calls in display callback 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};

17 17 91.427 Computer Graphics I, Fall 2010 Drawing the cube Method 1: Method 2: for(i=0; i<6; i++) glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &cubeIndices[4*i]); format of index data start of index data what to draw number of indices glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubeIndices); Draws cube with 1 function call!!


Download ppt "1 91.427 Computer Graphics I, Fall 2010 Building Models."

Similar presentations


Ads by Google