Computer Graphics Through OpenGL: From Theory to Experiments, Second Edition Chapter 10 Figure 10.1: One-dimensional objects. Figure 10.2: Graphs of familiar plane curves (curves are fairly accurate sketches but not exact plots). Figure 10.3: A couple of exotic curves. Figure 10.4: More exotic curves. Figure 10.5: A sphere and a plane intersect in a circle. Figure 10.6: Helix. Figure 10.7: Parameter space T = [a; b] mapped to a curve c. The sample grid on T, as well as its corresponding mapped sample on c, has 15 points (not all labeled). The polyline l connecting the mapped sample approximates c. Figure 10.8: A uniformly sampled parabola y = x2. Figure 10.9: Screenshot of astroid.cpp. Figure 10.10: (a) Curve with a repeating pattern (b) Ax head. Figure 10.11: Supercircles |x|n + |y|n = 1, for n = 1/2, 1, 2, 4. Figure 10.12: Points on a circle from a rational parametrization. Figure 10.13: Conic sections. Figure 10.14: (a) A double cone C showing two of the lines through the origin lying on it (b) A hyperbolic section of C by a non-radial plane p (c) Cross-sectional view of a non-radial plane p intersecting C. Figure 10.15: Non-curves: (a) x2 – y2 = 0 (b) x2 + y2 = 0 (c) y = 0, if x is an integer, 1 otherwise (gaps in the blue line indicate missing points). Figure 10.16: (a) A smooth curve (b) A non-smooth curve with a corner at P where the tangent changes direction abruptly. Figure 10.17: Tangent vectors to a circle. Figure 10.18: Good and bad parametrizations. Figure 10.19: Regular curves that share a tangent line at a common endpoint join to make one regular curve. Figure 10.20: Various orders of continuity. Figure 10.21: Camera moving along a path with a C2-discontinuity at the origin O. Figure 10.22: (a) and (b) Non-simple planar polygons (c) and (d) Simple planar polygons (what we call polygons). Figure 10.23: (a), (b) and (c) Meshes (d) and (e) Not meshes: parts around vertices V and W are not sheet-like (f) Your call. Figure 10.24: Planar surfaces with colored boundary; the last one has two components. The black edges belong to approximating meshes. Figure 10.25: Wooden chair. Figure 10.26: Parametric mapping of a circular cylinder s. Figure 10.27: Triangular mesh approximation of a circular cylinder. Upper: A uniform sample grid on the parameter rectangle and its corresponding mapped sample on the cylinder. Only a few points are labeled. Vertices of a triangle strip on the rectangle maps to those of a strip approximating a band of the cylinder. Lower: A map from a grid rectangle to a patch of the cylinder. Figure 10.28: Screenshot of cylinder.cpp. Figure 10.29: The composed mapping implemented in cylinder.cpp: first the parameter space is scaled, then mapped to the cylinder. Figure 10.30: Screenshot of hemisphere.cpp. Figure 10.31: Screenshot of helicalPipe.cpp. Figure 10.32: Draw these by modifying cylinder.cpp. Figure 10.33: Swept surfaces: trajectories dashed arrows, profiles solid black. Figure 10.34: Computing parametric equations of a torus: (a) Profile circle c revolves along trajectory circle C (b) Sectional view of the left diagram along the plane containing the z-axis and OO’. Figure 10.35: Screenshot of torus.cpp. Figure 10.36: Screenshot of torusSweep.cpp. Figure 10.37: (a) Part of a toroidal helix (b) Part of a toroidal helix pipe. Figure 10.38: (a) The profile curve for a table on the xy-plane, with the z-coordinates, all 0, not written (b) A point on the profile curve after a rotation CW about the y-axis. Figure 10.39: Screenshot of table.cpp. Figure 10.40: (a) A cone and (b) a doubly-curled cone as swept surfaces. Figure 10.41: Screenshot of doublyCurledCone.cpp. Figure 10.42: Screenshot of extrudedHelix.cpp. Figure 10.43: Stuff to draw. Figure 10.44: Model these? You gotta be kidding! Figure 10.45: A ruled surface showing several rulings and two defining trajectories. Figure 10.46: Bilinear patch. Figure 10.47: Screenshot of bilinearPatch.cpp. Figure 10.48: Generalized cones: (a) over a non-closed curve (b) over a closed curve (c) Right circular cone. Only the part between the two trajectories is drawn. Figure 10.49: A generalized cylinder and a special case. Figure 10.50: The nine non-degenerate quadric surfaces (from Wikimedia). Figure 10.51: (a) Screenshot of hyperboloid1sheet.cpp (b) Edible hyperbolic paraboloids (c) Hyperboloid footbridge over Corporation Street in Manchester in England supported by its rulings (courtesy of Patrick Litherland). Figure 10.52: GLU quadrics: (a) Sphere (b) Tapered cylinder (c) Annular disc (d) Partial annular disc. Figure 10.53: Defining the GLU quadrics. Figure 10.54: Regular polygons with number of sides indicated. The triangle shows its circumscribed circle. Figure 10.55: The five regular polyhedra with the number of faces indicated. Figure 10.56: Screenshot of tetrahedron.cpp. Figure 10.57: The five regular polyhedra each containing its inscribed dual (the cube is labeled to help with Exercise 10.67). Figure 10.58: Mapping a rectangle onto surfaces. Figure 10.59: Patting gray a double torus. Figure 10.60: Functions (u, v) → (f(u; v), g(u; v), h(u; v)) and their images. Figure 10.61: Any neighborhood of P will consist of two intersecting fragments, which cannot lie in one coordinate patch. Figure 10.62: (a) One coordinate patch wrapping almost all the way around a cylinder (b) A punctured square. Figure 10.63: The non-zero linearly independent tangent vectors span the tangent plane p at P. Figure 10.64: Various orders of surface continuity. Figure 10.65: Screenshot of bezierCurves.cpp with six control points, showing both the Bezier curve and its control polygon. Figure 10.66: Screenshot of bezierCurveWithEvalCoord.cpp. Figure 10.67: Two Bezier curves, one blue and one red, meet smoothly at an endpoint, as their control polygons meet smoothly (because v’, v and v’’ are collinear). Figure 10.68: Screenshot of bezierCurveTangent.cpp. Figure 10.69: Screenshot of bezierSurface.cpp, showing both the surface mesh and its control polyhedron. Figure 10.70: Screenshot of bezierCanoe.cpp. Figure 10.71: Two bicubic Bezier patches and their control polyhedrons, one pair blue and one red. The patches meet smoothly along a shared boundary curve which, together with its control polygon, is black. Figure 10.72: FreeGLUT library's version of the Utah teapot and Martin Newell's original porcelain Melitta model (from Wikimedia). Figure 10.73: Screenshot of torpedo.cpp. Figure 10.74: Bezier lady's shoe (courtesy of Pongpon Nilaphruek). Figure 10.75: Aircraft and express train. Figure 10.76: A coastline at increasing degrees of resolution: pairs of arrows indicate a blow-up. Figure 10.77: Koch curves. Figure 10.78: Screenshots from fractals.cpp: (a) Koch snowflake (b) Variant Koch snowflake (c) Tree. Figure 10.79: The variant Koch curve and fractal tree. Figure 10.80: A T-pipe is simulated by sticking one GLU cylinder into another. Figure 10.81: Sheared? But, what about the other side?