400 likes | 428 Views
2IV60 Computer graphics set 7: Basic Geometric Modeling. Jack van Wijk TU/e. Geometric modeling 1. The world is full of all kind of objects: Trees, people, cars, housed, clouds, rocks, waves, pencil sharpeners, fire, mountains, plants, … How can we describe these, such that they are
E N D
2IV60 Computer graphicsset 7: Basic Geometric Modeling Jack van Wijk TU/e
Geometric modeling 1 The world is full of all kind of objects: Trees, people, cars, housed, clouds, rocks, waves, pencil sharpeners, fire, mountains, plants, … How can we describe these, such that they are • easy to enter; • easy to process; • easy to display? Complex problem, HUGE topic!
Geometric modeling 2 Input: • by user • preferably on a high level, customized to application • by scanning objects • laser scanners: points • medical scanners: voxels
Geometric modeling 3 conversion Instructions, specifications User graphics pipeline triangles conversion 3D points, voxels Scanner image
Smooth Curves (2D) Two standard methods: • Parametric: X(t) = (x(t), y(t)) • Implicit: f(x, y) = 0 H&B A-8,9:772-774
Parametric description line 1 Given point P and vector V: X(t) = P + Vt Given two points P en Q: X(t) = P + (Q P)t , or = P(1t) + Qt Segment: tmin t tmax y t Q P x V H&B A-8,9:772-774
Parametric description curve • X(t) = (x(t), y(t)) • Drawing a curve in a simple way, approximate with a polyline: MoveTo(X(0)); for i := 1 to N do LineTo(X(iDt)); H&B A-8,9:772-774
Drawing a curve with OpenGL 1 X(float t):Point; { P[0]= …; P[1]=…; P[2]=…; return P; }; DrawX(); { N = 12; // use symbolic name for the number of segments int i; float dt := (tmax – tmin)/N; glBegin(GL_LINE_STRIP); // GL_LINE_LOOP if closed curve for (i = 0; i <= N; i++) // bounds here: 0 - N glVertex3fv(X(tmin + i*dt)); glEnd(); } H&B 4-5:82-83
Drawing a curve with OpenGL 2 • Using too few points: • jagged appearance; • Using too many points: • slow, • fat appearance (many segments per pixel). H&B 4-5:82-83
Drawing a curve with OpenGL 3 • Decide on #points: • characteristics shape; • size of shape on screen. • beforehand or adjust automatically. H&B 4-5:82-83
Implicit description line • (X P).N = 0 with N.V = 0 (N:normal vector) • Also: ax+by+c=0 y P N x V H&B A-8,9:772-774
f = 1 f = 0 f =-1 f =-2 Implicit description curve f >0 f <0 H&B A-8,9:772-774
Circle y x r H&B A-8,9:772-774
Curves (3D) Two standard methods: • Parametric: X(t) = (x(t), y(t), z(t)) • Implicit: f(x, y, z) = 0 and g(x, y, z) = 0 Intersection of two surfaces H&B A-8,9:772-774
Circle in 3D z y r x H&B A-8,9:772-774
Surfaces • Polyhedra • Parametric surfaces • Implicit surfaces H&B A-8,9:772-774
Polyhedra • Set of polygons that describe the surface of an object • Often only triangles (hardware!) • Many variations for storage (zie H&B 4-7) • Often additional information per vertex (color, normal, texture, …) H&B 13-1:418
Curved surfaces • Parametric: X(u,v) = (x(u,v), y(u,v), z(u,v)) • Implicit: f(x, y, z) = 0 H&B 13-3:421-422
u constant, v varies v constant, u varies Sphere 1 z y x H&B 13-4:422-424
v u constant, v varies u Sphere 2 z y x v constant, u varies H&B A-8,9:807-808
Sphere 3 z y x H&B 13-4:422-424
Partial Derivatives 1 H&B A10:774
Partial Derivatives 2 H&B A10:774
Normal on surface 1 u T(u) P(u) H&B A-10:774-775
Normal on surface 2 u Tu(u,v) Tv(u,v) P(u,v) v H&B A-10:774-775
Normal on surface 3 u N Tu(u,v) Tv(u,v) P(u,v) v H&B A-10:774-775
Tv N Tu Normal on surface 4 z v y x u H&B A-10:774-775
Normal on surface 5 H&B A-10:774-775
Normal on surface 6 N(x,y,z) (x,y,z) f(x,y,z)=0 H&B A-10:774-775
Normal on surface 7 f >0 f = 0 f <0 H&B A-10:774-775
Normal on surface 8 z N y x H&B A-10:774-775
Quadratic surfaces 1 z y x H&B 13-4:422-424
Quadratic surfaces 2 z c b a x y H&B 13-4:422-424
(x, y, z) y as x as Quadratic surfaces 3 z as y (0, y, z) r y as ra H&B 13-4:422-424
Drawing surfaces with OpenGL 1 • Quadratic surfaces: GLU and GLUT offer some basic functions: • glutSolidSphere(r, nLon, nLat); • glutSolidCone(rbase, rheight, nLon, nLat); • glutSolidTeapot(size); • gluSphere, gluCylinder, • Teapot? • Google: Utah teapot; • Google: Stanford bunny. H&B 13-6:425-431
Drawing surfaces with OpenGL 1 • Quadratic surfaces: GLU and GLUT offer some basic functions: • glutSolidSphere(r, nLon, nLat); • glutSolidCone(rbase, rheight, nLon, nLat); • glutSolidTeapot(size); • gluSphere, gluCylinder, • Alternative: Define your own, custom versions, based on standard way to render parametric surfaces. H&B 13-6:425-431
Drawing surfaces with OpenGL 2 X(float u, v):Point; { P[0]= …; P[1]=…; P[2]=…; return P; }; DrawX(); { NU, NV = 12; // use symbolic names for numbers of points again int i, j; float du := (umax – umin)/NU; float dv := (vmax – vmin)/NV; for (j = 0; j < NV; j++) { glBegin(GL_QUAD_STRIP); for (i = 0; i <= NU; j++) { glVertex3fv(X(umin + i*du, vmin + j*dv)); glVertex3fv(X(umin + i*du, vmin + (j+1)*dv)); } glEnd(); }
Drawing surfaces with OpenGL 3 Many variations possible • using triangle strips; • inserting normals, shading info, texture, ... Selecting the number of facets: • too few: jagged appearance; • too many: slow; • decide beforehand or automatically, based on size on screen and curvature surface. H&B 4-5:82-83
Next… • We now know how to define basic objects. • Stay tuned for splines: arbitrary curves and curved surfaces. • But first: let’s consider illumination and shading.