400 likes | 429 Views
Explore how to describe various objects to make them easy to enter, process, and display in computer graphics. Learn about parametric and implicit curves, drawing curves using OpenGL, and techniques for drawing surfaces with OpenGL. Topics include spheres, polygons, normal vectors, and quadratic surfaces.
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.