Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 What is Computer Graphics Computer graphics is commonly understood to mean the creation, storage and manipulation of models and images. (Andries van.

Similar presentations


Presentation on theme: "1 What is Computer Graphics Computer graphics is commonly understood to mean the creation, storage and manipulation of models and images. (Andries van."— Presentation transcript:

1 1 What is Computer Graphics Computer graphics is commonly understood to mean the creation, storage and manipulation of models and images. (Andries van Dam) Computer graphic is concerned with - all aspects of producing pictures or images using a computer. - the pictorial synthesis or real or imaginary objects from their computer based model

2 2 Computer Graphics  Synthesis of graphical images  Visualization : creating an image from an abstract, symbolic description.  Generation of Synthesis Image using graphical primitives data from real world phenomena

3 3 Image Processing  the transformation of an existing image into a more desirable or useful image. image enhancement The following images represent how noise affects images

4 4 Image Analysis Image Analysis (Computer Vision)  extracting symbolic information from the image. Computer Graphics Data => Picture Image ProcessingPicture => Picture Image AnalysisPicture => Data

5 5 What is Interactive Computer Graphics? User controls contents, structure, and appearance of objects and their displayed images via rapid visual feedback Basic components of an interactive graphics system  input (e.g., mouse, tablet and stylus, force feedback device,scanner…)  processing (and storage)  display/output (e.g., screen, paper-based printer, video recorder…)

6 6 A Brief History teletype printouts were first graphical output devices lightpens were an early input device CAD applications began in the 1960's plotters also a 60's development: high-resolution, but slow main bottlenecks of computer graphics back then cost of graphics hardware expense of computer resources batch systems weren't suitable for interactive graphics non-portability of hardware and software a new field: technology was primitive

7 7 History of Computer Graphics (1/5) 1950 MIT’s Whirlwind computer had computer generated CRTs mid 1950s SAGE command and control 1960s Ivan Sutherland’s thesis - Sketchpad  introduced data structures and interactive techniques http://www.computer.org/history/development/1951.htm

8 8 History of Computer Graphics (2/5) 1960s GM (general Motor)  developed CAD (Computer Aided Design) and CAM 1968 Tektronix storage tubes 1970s Boeing CAD CAM

9 9 Mid 1970s engineering workstations and personal computers emerged separately 1980s new algorithms and techniques  new standards  ever more powerful system  transition from specialized field 1990s widespread use  low cost, but powerful personal workstations  networks  essential part of systems  now part of multimedia History of Computer Graphics (3/5)

10 10 At first - progress was slow because cost of equipment was high (specially memory) significant computing resources needed difficulty in writing software ( harder than it looks) lack of standard and thus portability lack of software tools History of Computer Graphics (4/5)

11 11 Now - previous use cost of equipment is low. Most computer have necessary computing resources for graphics established standards, implementations and tools still difficulty in writing software ( still harder than it looks) History of Computer Graphics (5/5)

12 12 Applications of Computer Graphics divided in 4 majors area  Display of Information  Design  Simulation  User Interface

13 13 Display of Information Geographic information system (GIS) Computerized Tomography (CT) Magnetic resonance imaging (MRI) Ultrasound http://www.soest.hawaii.edu/soest/about.ftp.html http://www.queens.org/qmc/services/imaging/ct.htm

14 14 Design Computer-Aided Design (CAD)  Architecture  Design of Mechanical part  VLSI  etc... http://www.memagazine.org/contents/current/features/push/push.html

15 15 Simulation Graphical flight simulator  reduce training process Robotic simulation TV, Movie, advertising industries  generate photo realistic images Virtual Reality (VR)  reduce risk of training surgery astronaut The Concorde Panel. http://www.motionshop.com/pr/festocosimirlg.shtml

16 16 User Interfaces Window system  Window 2003  X window  MAC OS Graphical Network browsers  Netscape  Internet Explorer

17 17 Areas of research in Graphics (1/2) mathematical modeling:  interpolation, curve and surface fitting  computational geometry: algorithmic applications in geometry  study of light and optical phenomenon: colour, texture, shades  modelling the characteristics of physical objects (bouncing Jello)

18 18 Areas of research in Graphics (2/2) Software technology  standardized graphics languages and libraries  graphics tools and interfaces  algorithm design Hardware  specialized graphics chips, monitors, interface devices

19 19 Graphics Applications (1/5) Entertainment: Cinema Pixar: Geri ’ s Game Universal: Jurassic Park A bug ’ s Life Antz

20 20 Graphics Applications (2/5) Entertainment: Games Quake III Aki Ross : Final Fantasy Star Wars Jedi Outcast: Jedi Knight II

21 21 Graphics Applications (3/5) Medical Visualization The Visible Human Project http://www.ercim.org/publication/Ercim_News/enw44/koenig.html

22 22 Graphics Applications (4/5) Computer Aided Design (CAD)

23 23 Graphics Applications (5/5) Scientific Visualization

24 24 Curve and Surface Modeling 1 2 3 4 5 6 7 8 http://www.geocities.com/SiliconValley/Lakes/2057/nurbs.html

25 25 Photorealistic Illumination Models http://www.pixar.com http://www.ktx.com/3dsmaxr3/ http://www.aliaswavefront.com

26 26 Fractal Systems http://sprott.physics.wisc.edu/fractals.htm

27 27 Information Visualization Visible Decisions SeeIT(http://www.vdi.com)

28 28 Lecture Topics Introduction Mathematical Foundation Coordinate Systems Introduction to Graphics in 2D Windows and Clipping Introduction to Graphics in 3D Viewing in 3D Visible Surface Determination Algorithm efficiency Z-buffer algorithm Scan line algorithms Visible-surface Ray Tracing Other algorithms Color Models Illumination and Shading

29 29 Mathematical foundation Mathematical appears throughout 3D graphics Example: Object surfaces can be represented as polygons whose vertex position are specified by vectors Rendering requires testing whether vertices lie in front of or behind various planes. The test involves a dot product with the plane’s normal vector.

30 30 Geometric transformation Goal: specify object’s position and orientations in a 3D world Use Linear transformations that rotate and translate objects’ vertices. Apply these transformations in matrix form

31 31 Viewing Goal: map the visible part of a 3D world to a 2 D image Use camera-like parameters to define a 3D view volume Project the view voulme onto a 2D image plane Map viewport on the image plane to the screen

32 32 OpenGL OpenGL is strictly defined as “a software interface to graphics hardware”. It is a 3D graphics and modeling library variety purposes, CAD engineering, architectural applications, computer- generated dianosaurs in blockbuster movies Developed by SGI

33 33 Clipping Goal: cut off the part of objects outside the view volume to avoid rendering them

34 34 Scan Conversion Goal: convert a project, clipped object into pixels on raster lines. Use efficient incremental methods

35 35 Antialiasing Raster displays produce blocky aliasing artifacts Antialiasing techniques reduces the problem by applying the theory of sampling and signal processing

36 36 Color Various color spaces provide ways to specify colors in term of components: red, green, blue hue, saturation, value Different output devices display different subsets of the perceptible colors

37 37 Hidden Surface Removal When several overlapping polygons are drawn on the screen, which one is on top? Which is right?

38 38 Z-buffering A fast hardware solution is the Z-buffer The “depth” of each pixel relative to the screen is calculated and saved in a buffer The pixel with the smallest depth is the one that is displayed The other pixels are on surfaces that are hidden Z Screen This pixel is drawn on screen Polygons

39 39 Lighting Models and Shading For visual realism, lighting models have been developed to illuminate the surfaces of solid models These models incorporate  ambient lighting and illumination  diffuse reflection of directional lighting  specular reflection of directional lighting Ambient lighting : incident light reflected light incident light reflected light

40 40 Ray Tracing Ray tracing traces a ray of light from the eye to a light source Ray tracing realistically renders scenes with shiny and transparent objects Eye Light Source Object Light Source Object Shadow Ray Eye Ray

41 41 Radiosity Diffuse illumination results from the absorption and reflection of diffuse light from many objects in the scene Radiosity uses thermal models of emission and reflection of radiation to accurately calculate diffuse lighting Radiosity is very good at rendering architectural interiors

42 42 Texture Mapping For realism, photographic textures are “mapped” onto the surfaces of objects Example textures:  woodgrain  concrete  grass  marble Texture mapping is very computationally intensive shadows texture mapping reflections

43 43 Example of Shading WireframeFlat Shaded Smooth Shaded Shadows

44 44 Mathematical Foundation for Graphics

45 45 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

46 46 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

47 47 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  Euclidean geometry: two triangles are identical if two corresponding sides and the angle between them are identical

48 48 Geometry Geometry provides a mathematical foundation for much of computer graphics:  Geometric Spaces: Vector, Affine, Euclidean, Cartesian, Projective  Affine Geometry  Affine Transformations  Perspective  Projective Transformations  Matrix Representation of Transformations  Viewing Transformations

49 49 Introduction (1/2) Points are associated with locations of space Vectors represent displacements between points or directions Points, vectors, and operators that combine them are the common tools for solving many geometric problems that arise in Geometric Modeling, Computer Graphics, Animation, Visualization, and Computational Geometry.

50 50 Introduction (2/2) The three most fundamental operators on vectors are the dot product, the cross product, and the mixed product (sometimes called the triple product). Although a point and a vector may be represented by its three coordinates, they are of different type and should not be mixed

51 51 What will you learn here? (1/2) Properties of dot, cross, and mixed products How to write simple tests for  4-points and 2-lines coplanarity  Intersection of two coplanar edges  Parallelism of two edges or of two lines  Clockwise orientation of a triangle from a viewpoint  Positive orientation of a tetrahedron  Edge/triangle and ray/triangle intersection

52 52 What will you learn here? (2/2) How to compute  Center of mass of a triangle  Volume of a tetrahedron  “ Shadow ” (orthogonal projection) of a vector on a plane  Line/plane intersection  Plane/plane intersection  Plane/plane/plane intersection

53 53 Terminology Orthogonal to = Normal to = forms a 90 o angle with Norm of a vector = length of the vector Are coplanar = there is a plane containing them

54 54 Notation  means “is always equal to” or “by definition” == means the test “is equal to” used in Boolean expressions := is the assignment “is computed as” and is used in construction algorithms s (italic type) Boolean v (normal type) scalar a (bold type lower-case) point A A (bold upper-case) pointset (edge, curve, triangle, surface, solid) U (bold underscored upper-case) vector u (bold underscored lower-case) unit vector T (bold upper-case) transformation

55 55 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

56 56 Vectors And Point We commonly use vectors to represent:  Points in space (i.e., location)  Displacements from point to point  Direction (i.e., orientation) But we want points and directions to behave differently  Ex: To translate something means to move it without changing its orientation  Translation of a point = different point  Translation of a direction = same direction

57 57 Vectors Physical definition: a vector is a quantity with two attributes  Direction  Magnitude Examples include  Force  Velocity  Directed line segments Most important example for graphics Can map to other types v

58 58 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v v u w

59 59 Vectors Lack Position These vectors are identical  Same direction and magnitude Vectors spaces insufficient for geometry  Need points

60 60 Vectors (1/2) Vector space (analytic definition from Descartes in the 1600s)  U+V=V+U (vector addition)  U+(V+W)=(U+V)+W  0 is the zero (or null) vector if  V, 0+V=V  –V is the inverse of V, so that the vector subtraction V–V= 0  s(U+V)=sU+sV (scalar multiplication)  U/s is the scalar division (same as multiplication by s –1 ) i.e. U/s = s –1 U  (a+b)V=aV+bV

61 61 Vectors (2/2) Vectors are used to represent displacement between points  Each vector V has a norm (length) denoted ||V||  Let assume V = (v 1,v 2,v 3, …,v n ), ||V|| = | V | =  V / ||V|| is the unit vector (length 1) of V. We denote it V u or v  If ||V||==0, then V is the null vector 0  Unit vectors are used to represent  Basis vectors of a coordinate system  Directions of tangents or normals in definitions of lines or planes

62 62 Vector Spaces A linear combination of vectors results in a new vector: v =  1 v 1 +  2 v 2 + … +  n v n where  is any scalar If the only set of scalars such that  1 v 1 +  2 v 2 + … +  n v n = 0 is  1 =  2 = … =  3 = 0 then we say the vectors are linearly independent The dimension of a space is the greatest number of linearly independent vectors possible in a vector set For a vector space of dimension n, any set of n linearly independent vectors form a basis

63 63 Vector Spaces: An Example  Vectors are “ arrows ” rooted at the origin  Scalar multiplication “ streches ” the arrow, changing its length (magnitude) but not its direction  Addition uses the “ trapezoid rule ” : u+v y x u v

64 64 Points Location in space Operations allowed between points and vectors  Point-point subtraction yields a vector  Equivalent to point-vector addition P = v + Q v = P - Q

65 65 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)

66 66 Affine Space (1/2) Definition: Set of Vectors V and a Set of Points P Vectors V form a vector space. Points can be combined with vectors to make new points: P + v =Q with P,Q  P and v  V Dimension: The dimension of an affine space is the same as that of V.

67 67 Affine Space (2/2) Note:  All other point operations are just variations on the P + v operation.  No distinguished origin  No notion of distances or angles.  Most of what we do in graphics is affine.

68 68 Affine space V=b–a (vector V is the displacement from point a to point b)  Notation: ab stands for the vector b – a  c– a = (c – b) + (b – a). Written ac = ab + bc  Point b is uniquely defined, given point a and vector (b – a)

69 69 Affine space  Points may be used to represent  The vertices of a triangle or polyhedron  The origin of a coordinate system  Points in the definition of lines or plane

70 70 Lines Consider all points of the form  P(  )=P 0 +  d  Set of all points that pass through P 0 in the direction of the vector d

71 71 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(  ) =  x 0 + (1-  )x 1 y(  ) =  y 0 + (1-  )y 1

72 72 Rays and Line Segments If  >= 0, then P(  ) is the ray leaving P 0 in the direction d If we use two points to define v, then P(  ) = Q+  v = Q +  (R-Q) =  R + (1-  )Q For 0<=  <=1 we get all the points on the line segment joining R and Q

73 73 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 Q Q P convex not convex

74 74 Affine Sums Consider the “ sum ” P=  1 P 1 +  2 P 2 +…..+  n P n Can show by induction that this sum makes sense iff  1 +  2 + …..  n =1 in which case we have the affine sum of the points P 1  P 2,…..P n If, in addition,  i >=0, we have the convex hull of P 1  P 2,…..P n

75 75 Convex Hull Smallest convex object containing P 1  P 2,…..P n Formed by “ shrink wrapping ” points

76 76 Curves and Surfaces Curves are one parameter entities of the form P(  ) where the function is nonlinear Surfaces are formed from two-parameter functions P( ,  )  Linear functions give planes and polygons P(  ) P( ,  )

77 77 Planes A plane be determined by a point and two vectors or by three points P( ,  )=R+  u+  v P( ,  )=R+  (Q-R)+  (P-Q)

78 78 Triangles convex sum of P and Q convex sum of S(  ) and R for 0<= ,  <=1, we get all points in triangle

79 79 Normals Every plane has a vector n normal (perpendicular, orthogonal) to it From point-two vector form P( ,  )=R+  u+  v, we know we can use the cross product to find n = u  v and the equivalent form (P(  )-P)  n=0 u v P

80 80 Dot Product (1/2) U  V denotes the dot product (also called the inner product) U  V = ||U||  ||V||  cos(angle(U,V))  U  V is a scalar.  U  V==0  ( U==0 or V==0 or (U and V are orthogonal)) u v cos(angle(u,v)) V  U = U  V < 0 hereV  U = U  V > 0 here

81 81 Dot Product (2/2)  U  V is positive if the angle between U and V is less than 90 o  Note that U  V = V  U, because: cos(a)=cos(– a).  u  v = cos(angle(u,v) # unit vectors: ||u||  1  the dot product of two unit vectors is the cosine of their angle  V  u = length of the orthogonal projection of V onto the direction of u  ||U||= sqrt(U  U) = length of U = norm of U

82 82 Dot Product The dot product or, more generally, inner product of two vectors is a scalar: v 1 v 2 = x 1 x 2 + y 1 y 2 + z 1 z 2 (in 3D) Useful for many purposes  Computing the length of a vector: length( v ) = sqrt( v v)  Normalizing a vector, making it unit-length  Computing the angle between two vectors: u v = |u| |v| cos(θ)  Checking two vectors for orthogonality  Projecting one vector onto another θ u v

83 83 Given the unit normal n to a mirror surface and the unit direction l towards the light, compute the direction r of the reflected light. Computing the reflection vector n l r By symmetry, l+r is parallel to n and has a norm that is twice the length of the projection n  l of l upon n. Hence: r = 2(n  l)n–l l r –l–l

84 84 Computing a “ shadow ” vector (projection) Given the unit up-vector u and the unit direction d, compute the shadow T of d onto the floor (orthogonal to u). T and u are orthogonal. d is the vector sum T+ ( d  u )u. Hence: T = d – (du)uT = d – (du)u u d T

85 85 Cross product (1/3) U  V denotes the cross product U  V is either 0 or a vector orthogonal to both U and V When U==0 or V==0 or U//V (parallel) then U  V= 0 Otherwise, U  V is orthogonal to both U and V

86 86 Cross product (2/3) The direction of U  V is defined by the thumb of the right hand Curling the fingers from U to V  Or standing parallel to U and looking at V, U  V goes left ||U  V||  ||U||  ||V||  sin(angle(U,V)) sin(angle(u,v) 2  1 – (u  v) 2 # unit vectors (u  v== 0)  u//v (parallel) U  V  – V  U Useful identity: U  (V  W)  (U  W)V – (U  V)W

87 87 Cross Product (3/3) The cross product or vector product of two vectors is a vector: The cross product of two vectors is orthogonal to both Right-hand rule dictates direction of cross product

88 88 When are two edges parallel in 3D? Edge(a,b) is parallel to Edge(c,d) if ab  cd == 0

89 89 Mixed product U  ( V  W ) is called a mixed product  U  (V  W) is a scalar  U  (V  W) ==0 when one of the vectors is null or all 3 are coplanar  U  (V  W) is the determinant | U V W |  U  (V  W)  V  (W  U)  – U  (W  V) # cyclic permutation

90 90 Testing whether a triangle is front-facing When does the triangle a, b, c appear clockwise from d? when da  (db  dc) > 0 a b c d

91 91 Volume of a tetrahedron Volume of a tetrahedron with vertices a, b, c and d is v  | da  (db  dc) | / 6 db c dc db db  dc a da

92 92 z, s, and v functions (1/2) zero: z(a,b,c,d)  da  (db  dc)==0 # tests co-planarity of 4 points  Returns Boolean TRUE when a,b,c,d are coplanar sign: s(a,b,c,d)  da  (db  dc)>0 # test orientation or side  Returns Boolean TRUE when a,b,c appear clockwise from d  Used to test whether d in on the “good” side of plane through a,b,c db c dc db db  dc a da c a b d

93 93 z, s, and v functions (2/2) value: v(a,b,c,d)  da  (db  dc) # compute volume  Returns scalar whose absolute value is 6 times the volume of tetrahedron a,b,c,d  v(a,b,c,d)  v(d,a,b,c)  –v(b,a,c,d)

94 94 Testing whether an edge is concave How to test whether the edge (c,b) shared by triangles (a,b,c) and (c,b,d) is concave?

95 95 When do two edges intersect in 2D? Write a geometric expression that returns true when two coplanar edges (a,b) and (c,d) intersect a b d c 0  (ab  ac)(ab  ad) and 0  (cd  ca)(cd  cb) d c a b

96 96 When do two edges intersect in 3D? Consider two edges: edge(a,b) and edge(c,d) When are they co-planar? When do they intersect? a b d c q p When z(a,b,c,d) When they are co-planar and 0  (ab  ac)(ab  ad) and 0  (cd  ca)(cd  cb) a b d c

97 97 What is the common normal to 2 edges in 3D? Consider two edges: edge(a,b) and edge(c,d) What is their common normal n? a b d c n n=(ab  cd) u

98 98 When is a point inside a tetrahedron? When does point p lie inside tetrahedron a, b, c, d ?  Assume z(a,b,c,d) is FALSE (not coplanar) When is p on the boundary of the tetrahedron?  Do as an exercise for practice. ba c p d When s(a,b,c,d), s(p,b,c,d), s(a,p,c,d), s(a,b,p,d), and s(a,b,c,p) are identical. (i.e. all return TRUE or all return FALSE)

99 99 A faster point-in-tetrahedron test ? Suggested by Nguyen Truong  Write ap = sab+tac+uad  Solve for s, t, u (linear system of 3 equations)  Requires 17 multiplications, 3 divisions, and 11 additions  Check that s, t, and u are positive and that s+u+t<1 A more expensive Variation: Compute s, t, u, w  w = v(a,b,c,d)  s = v(a,p,c,d)  u = v(a,b,p,d)  t = v(a,b,c,p) Check that  w, s, t, u have the same sign and that s+u+t<w ba c p d

100 100 When is a 3D point inside a triangle When does point p lie inside triangle with vertices a, b, c ? a b c p p When z(p,a,b,c) and (ab  ap)(bc  bp)  0 and (bc  bp)(ca  cp)  0

101 101 Parametric representation of a line Let Line(p,t) be the line through point p with tangent t Its parametric form associates a scalar s with a point q(s) on the line s defines the distance from p to q(s) q(s) = p + st  Note that the direction of t gives an orientation to the line (direction where s is positive) We can represent a line by p and t p q t s

102 102 Implicit representation of a plane Let Plane(r,n) be the plane through point r with normal n Its implicit form states that a point q lies on Plane(r,n) when rq  n=0  Remember that rq = q – r Note that the direction of n defines an orientation of the plane p n r q n r p not in plane

103 103 Line/plane intersection Compute the point q of intersection between Line(p,t) and Plane(r,n) Replacing q by p+st in (q–r)  n=0 yields (p–r+st)  n=0 Solving for s yields rp  n+st  n=0 and s = – rp  n / t  n s = pr  n / t  n Hence q = p + (pr  n)t / (t  n) p q t n r s

104 104 When are two lines coplanar in 3D? L(p,t) and L(q,u) are coplanar When t  u == 0 OR pq(t  u) == 0

105 105 What is the intersection of two planes Consider two planes Plane(p,n) and Plane(q,m) Assume that n and m are not parallel (i.e. n  m ≠ 0) Their intersection is a line Line(r,t). How can one compute r and t ? t := (n  m) u let u := n  t r := p+( pqm)u /(um) q p n m r u t If correct, then provide the derivation. Otherwise, provided the correct answer.

106 106 What is the intersection of three planes Consider planes Plane(p,m), Plane(q,n), and Plane(r,m). How do you compute their intersection w ? q p n m r t w Write w=p+an+bm+ct then solve the linear system {pwn=0, qwm=0, rwt=0} for a, b, and c or compute the line of intersection between two of these planes and then intersect it with the third one.

107 107 Implementation Points and vectors are each represented by their 3 coordinates  p=(p x,p y,p z ) and v=(v x,v y,v z ) U V = U x V x + U y V y + U z V z U  V = (U y V z – U z V y ) – (U x V z – U z V x ) + (U x V y – U y V x ) Implement:  Points and vectors  Dot, cross, and mixed products  z, s, and v functions from mixed products  Edge/triangle intersection  Lines and Planes  Line/Plane, Plane/Plane, and Plane/Plane/Plane intersections Return exception for singular cases (parallelism … )

108 108 Linear Transformations A linear transformation:  Maps one vector to another  Preserves linear combinations Thus behavior of linear transformation is completely determined by what it does to a basis Turns out any linear transform can be represented by a matrix

109 109 Matrices By convention, matrix element M rc is located at row r and column c: By (OpenGL) convention, vectors are columns:

110 110 Matrices Matrix-vector multiplication applies a linear transformation to a vector: Recall how to do matrix multiplication

111 111 Matrix Transformations A sequence or composition of linear transformations corresponds to the product of the corresponding matrices  Note: the matrices to the right affect vector first  Note: order of matrices matters! The identity matrix I has no effect in multiplication Some (not all) matrices have an inverse:

112 112 2D and 3D Transformation

113 113 Transformations and Matrices Transformations are functions Matrices are functions representations Matrices represent linear transformation {2x2 Matrices}  {2D Linear Transformation}

114 114 Transformations (1/3) What are they?  changing something to something else via rules  mathematics: mapping between values in a range set and domain set (function/relation)  geometric: translate, rotate, scale, shear,… Why are they important to graphics?  moving objects on screen / in space  mapping from model space to screen space  specifying parent/child relationships  …

115 115 Transformation (2/3) Translation  Moving an object Scale  Changing the size of an object tyty txtx w old w new h old h new x new = x old + t x ; y new = y old + t y s x =w new /w old s y =h new /h old x new = s x x old y new = s y y old

116 116 Transformation (3/3) To rotate a line or polygon, we must rotate each of its vertices Shear (x,y) Original Datay Shear x Shear

117 117 What is a 2D Linear Transform? Example

118 118 Example Scale in x by 2

119 119 Transformations: Translation (1/2) A translation is a straight line movement of an object from one position to another. A point (x,y) is transformed to the point (x’,y’) by adding the translation distances T x and T y : x’ = x + T x y’ = y + T y

120 120 Transformations: Translation(2/2) moving a point by a given t x and t y amount e.g. point P is translated to point P’ moving a line by a given t x and t y amount translate each of the 2 endpoints

121 121 Transformations: Rotation (1/4) Objects rotated according to angle of rotation theta (  ) Suppose a point P(x,y) is transformed to the point P'(x',y') by an anti-clockwise rotation about the origin by an angle of  degrees, then: Given x = r cos , y = r sin  x’ = x cos  – y sin  y’ = y sin  + y cos 

122 122 Transformations: Rotation (2/4) Rotation P by  anticlockwise relative to origin (0,0)

123 123 Transformations: Rotation (3/4) Rotation about an arbitary pivot point (x R,y R ) Step 1: translation of the object by (-x R,-y R ) x 1 = x - x R y 1 = y - y R Step 2: rotation about the origin x 2 = x 1 cos(  ) - y 1 sin (  ) y 2 = y 1 cos(  ) - x 1 sin (  ) Step 3: translation of the rotated object by (xR,yR) x’ = x r + x 2 y’ = y r + y 2

124 124 Transformations: Rotation (4/4) object can be rotated around an arbitrary point (x r,y r ) known as rotation or pivot point by: x' = x r + (x - x r ) cos(  ) - (y - y r ) sin (  ) y' = y r + (x - x r ) sin (  )+(y - y r ) cos(  )

125 125 Transformations: Scaling (1/5) Scaling changes the size of an object Achieved by applying scaling factors s x and s y Scaling factors are applied to the X and Y co-ordinates of points defining an object’s

126 126 Transformations: Scaling (2/5) uniform scaling is produced when s x and s y have same valuei.e. s x = s y non-uniform scaling is produced when s x and s x are not equal - e.g. an ellipse from a circle.  i.e. s x  s y x 2 = s x x 1 y 2 = s y y 1

127 127 Transformations: Scaling (3/5) Simple scaling - relative to (0,0) General form: Ex: s x = 2 and s y =1

128 128 Transformations: Scaling (4/5) If the point (x f,y f ) is to be the fixed point, the transformation is: x' = x f + (x - x f ) S x y' = y f + (y - y f ) S y This can be rearranged to give: x' = x S x + (1 - S x ) x f y' = y S y + (1 - S y ) y f which is a combination of a scaling about the origin and a translation.

129 129 Transformations: Scaling (5/5)

130 130 Transformation as Matrices Scale: x’ = s x x y’ = s y y Rotation: x’ = xcos  - ysin  y’ = xsin  + ycos  Translation: x’ = x + t x y’ = y + t y

131 131 Transformations: Shear (1/2) Shear in x:

132 132 Transformations: Shear (2/2) Shear in y:

133 133 Shear in x then in y

134 134 Shear in y then in x

135 135 Homogeneous coordinate As translations do not have a 2 x 2 matrix representation, we introduce homogeneous coordinates to allow a 3 x 3 matrix representation. The Homogeneous coordinate corresponding to the point (x,y) is the triple (x h, y h, w) where: x h = wx y h = wy For the two dimensional transformations we can set w = 1.

136 136 Matrix representation

137 137 Basic Transformation (1/3) Translation

138 138 Basic Transformation (2/3) Rotation

139 139 Basic Transformation (3/3) Scaling

140 140 Composite Transformation Suppose we wished to perform multiple transformations on a point:

141 141 Example of Composite Transformation(1/3) A scaling transformation at an arbitrary angle is a combination of two rotations and a scaling: R(-t) S(S x,S y ) R(t) A rotation about an arbitrary point (x f,y f ) by and angle t anti-clockwise has matrix: T(-x f,-y f ) R(t) T(x f,y f )

142 142 Example of Composite Transformation(2/3) Reflection about the y-axisReflection about the x-axis

143 143 Example of Composite Transformation(3/3) Reflection about the originReflection about the line y=x

144 144 3D Transformation Z X Y Y X Z

145 145 Basic 3D Transformations Translation Scale Rotation Shear As in 2D, we use homogeneous coordinates (x,y,z,w), so that transformations may be composited together via matrix multiplication.

146 146 3D Translation and Scaling TP = (x + t x, y + t y, z + t z ) SP = (s x x, s y y, s z z)

147 147 3D Rotation (1/4) Positive Rotations are defined as follows: Axis of rotation is Direction of positive rotation is xy to z yz to x zx to y

148 148 3D Rotation (2/4) Rotation about x-axis R x ( ß )P

149 149 3D Rotation (3/4) Rotation about y-axis R y ( ß )P

150 150 3D Rotation (4/4) Rotation about z-axis R z (ß)P

151 151 3D Shear xy Shear: SH xy P

152 152 Rotation About An Arbitary Axis (1/3) 1. Translate one end of the axis to the origin 2. Rotate about the y- axis and angle  3. Rotate about the x- axis through an angle  Z P1P1 P2P2 Y X b a c u1u1 u2u2 u3u3 ß U

153 153 Rotation About An Arbitary Axis (2/3) Z P1P1 P2P2 Y X b a c u1u1 u2u2 u3u3 ß U Z Y X b a c u1u1 u2u2 u3u3 ß U Z Y µ a u2u2 X R 4. When U is aligned with the z-axis, apply the original rotation, R, about the z-axis. 5. Apply the inverses of the transformations in reverse order.

154 154 Rotation About An Arbitary Axis (3/3) T -1 R y ( ß ) R x (- µ ) R R x ( µ ) R y (- ß ) T P

155 Hierarchical Modeling

156 156 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Objectives Examine the limitations of linear modeling  Symbols and instances Introduce hierarchical models  Articulated models  Robots Introduce Tree and DAG models

157 157 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Instance Transformation Start with a prototype object (a symbol) Each appearance of the object in the model is an instance  Must scale, orient, position  Defines instance transformation

158 158 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Symbol-Instance Table Can store a model by assigning a number to each symbol and storing the parameters for the instance transformation

159 159 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Relationships in Car Model Symbol-instance table does not show relationships between parts of model Consider model of car  Chassis + 4 identical wheels  Two symbols Rate of forward motion determined by rotational speed of wheels

160 160 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Structure Through Function Calls car(speed) { chassis() wheel(right_front); wheel(left_front); wheel(right_rear); wheel(left_rear); } Fails to show relationships well Look at problem using a graph

161 161 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Graphs Set of nodes and edges (links) Edge connects a pair of nodes  Directed or undirected Cycle: directed path that is a loop loop

162 162 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Tree Graph in which each node (except the root) has exactly one parent node  May have multiple children  Leaf or terminal node: no children root node leaf node

163 163 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Tree Model of Car

164 164 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 DAG Model If we use the fact that all the wheels are identical, we get a directed acyclic graph  Not much different than dealing with a tree

165 165 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Modeling with Trees Must decide what information to place in nodes and what to put in edges Nodes  What to draw  Pointers to children Edges  May have information on incremental changes to transformation matrices (can also store in nodes)

166 166 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Robot Arm robot arm parts in their own coodinate systems

167 167 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Articulated Models Robot arm is an example of an articulated model  Parts connected at joints  Can specify state of model by giving all joint angles

168 168 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Relationships in Robot Arm Base rotates independently  Single angle determines position Lower arm attached to base  Its position depends on rotation of base  Must also translate relative to base and rotate about connecting joint Upper arm attached to lower arm  Its position depends on both base and lower arm  Must translate relative to lower arm and rotate about joint connecting to lower arm

169 169 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Required Matrices Rotation of base: R b  Apply M = R b to base Translate lower arm relative to base: T lu Rotate lower arm around joint: R lu  Apply M = R b T lu R lu to lower arm Translate upper arm relative to upper arm: T uu Rotate upper arm around joint: R uu  Apply M = R b T lu R lu T uu R uu to upper arm

170 170 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 OpenGL Code for Robot robot_arm() { glRotate(theta, 0.0, 1.0, 0.0); base(); glTranslate(0.0, h1, 0.0); glRotate(phi, 0.0, 1.0, 0.0); lower_arm(); glTranslate(0.0, h2, 0.0); glRotate(psi, 0.0, 1.0, 0.0); upper_arm(); }

171 171 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Tree Model of Robot Note code shows relationships between parts of model  Can change “look” of parts easily without altering relationships Simple example of tree model Want a general node structure for nodes

172 172 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Possible Node Structure Code for drawing part or pointer to drawing function linked list of pointers to children matrix relating node to parent

173 173 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Generalizations Need to deal with multiple children  How do we represent a more general tree?  How do we traverse such a data structure? Animation  How to use dynamically?  Can we create and delete nodes during execution?

174 Hierarchical Modeling II

175 175 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Objectives Build a tree-structured model of a humanoid figure Examine various traversal strategies Build a generalized tree-model structure that is independent of the particular model

176 176 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Humanoid Figure

177 177 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Building the Model Can build a simple implementation using quadrics: ellipsoids and cylinders Access parts through functions  torso()  left_upper_arm() Matrices describe position of node with respect to its parent  M lla positions left lower leg with respect to left upper arm

178 178 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Tree with Matrices

179 179 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Display and Traversal The position of the figure is determined by 11 joint angles (two for the head and one for each other part) Display of the tree requires a graph traversal  Visit each node once  Display function at each node that describes the part associated with the node, applying the correct transformation matrix for position and orientation

180 180 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Transformation Matrices There are 10 relevant matrices  M positions and orients entire figure through the torso which is the root node  M h positions head with respect to torso  M lua, M rua, M lul, M rul position arms and legs with respect to torso  M lla, M rla, M lll, M rll position lower parts of limbs with respect to corresponding upper limbs

181 181 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Stack-based Traversal Set model-view matrix to M and draw torso Set model-view matrix to MM h and draw head For left-upper arm need MM lua and so on Rather than recomputing MM lua from scratch or using an inverse matrix, we can use the matrix stack to store M and other matrices as we traverse the tree

182 182 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Traversal Code figure() { glPushMatrix() torso(); glRotate3f(…); head(); glPopMatrix(); glPushMatrix(); glTranslate3f(…); glRotate3f(…); left_upper_arm(); glPopMatrix(); glPushMatrix(); save present model-view matrix update model-view matrix for head recover original model-view matrix save it again update model-view matrix for left upper arm recover and save original model-view matrix again rest of code

183 183 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Analysis The code describes a particular tree and a particular traversal strategy  Can we develop a more general approach? Note that the sample code does not include state changes, such as changes to colors  May also want to use glPushAttrib and glPopAttrib to protect against unexpected state changes affecting later parts of the code

184 184 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 General Tree Data Structure Need a data structure to represent tree and an algorithm to traverse the tree We will use a left-child right sibling structure  Uses linked lists  Each node in data structure is two pointers  Left: next node  Right: linked list of children

185 185 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Left-Child Right-Sibling Tree

186 186 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Tree node Structure At each node we need to store  Pointer to sibling  Pointer to child  Pointer to a function that draws the object represented by the node  Homogeneous coordinate matrix to multiply on the right of the current model-view matrix Represents changes going from parent to node In OpenGL this matrix is a 1D array storing matrix by columns

187 187 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 C Definition of treenode typedef struct treenode { Glfloat m[16]; void (*f)(); struct treenode *sibling; struct treenode *child; } treenode;

188 188 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Defining the torso node treenode torso_node, head_node, lua_node, … ; /* use OpenGL functions to form matrix */ glLoadIdentity(); glRotatef(theta[0], 0.0, 1.0, 0.0); /* move model-view matrix to m */ glGetFloatv(GL_MODELVIEW_MATRIX, torso_node.m) torso_node.f = torso; /* torso() draws torso */ Torso_node.sibling = NULL; Torso_node.child = &head_node;

189 189 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Notes The position of figure is determined by 11 joint angles stored in theta[11] Animate by changing the angles and redisplaying We form the required matrices using glRotate and glTranslate  More efficient than software  Because the matrix is formed in model-view matrix, we may want to first push original model- view matrix on matrix stach

190 190 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Preorder Traversal void traverse(treenode *root) { if(root == NULL) return; glPushMatrix(); glMultMatrix(root->m); root->f(); if(root->child != NULL) traverse(root->child); glPopMatrix(); if(root->sibling != NULL) traverse(root->sibling); }

191 191 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Notes We must save modelview matrix before multiplying it by node matrix  Updated matrix applies to children of node but not to siblings which contain their own matrices The traversal program applies to any left- child right-sibling tree  The particular tree is encoded in the definition of the individual nodes The order of traversal matters because of possible state changes in the functions

192 192 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Dynamic Trees If we use pointers, the structure can be dynamic typedef treenode *tree_ptr; tree_ptr torso_ptr; torso_ptr = malloc(sizeof(treenode)); Definition of nodes and traversal are essentially the same as before but we can add and delete nodes during execution

193 Computer Viewing

194 194 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Objectives Introduce the mathematics of projection Introduce OpenGL viewing functions Look at alternate viewing APIs

195 195 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Computer Viewing There are three aspects of the viewing process, all of which are implemented in the pipeline,  Positioning the camera Setting the model-view matrix  Selecting a lens Setting the projection matrix  Clipping Setting the view volume

196 196 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 The OpenGL Camera In OpenGL, initially the world and camera frames are the same  Default model-view matrix is an identity The camera is located at origin and points in the negative z direction OpenGL also specifies a default view volume that is a cube with sides of length 2 centered at the origin  Default projection matrix is an identity

197 197 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Default Projection Default projection is orthogonal clipped out z=0 2

198 198 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Moving the Camera Frame If we want to visualize object with both positive and negative z values we can either  Move the camera in the positive z direction Translate the camera frame  Move the objects in the negative z direction Translate the world frame Both of these views are equivalent and are determined by the model-view matrix  Want a translation ( glTranslatef(0.0,0.0,-d); )  d > 0

199 199 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Moving Camera back from Origin default frames frames after translation by –d d > 0

200 200 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Moving the Camera We can move the camera to any desired position by a sequence of rotations and translations Example: side view  Rotate the camera  Move it away from origin  Model-view matrix C = TR

201 201 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 OpenGL code Remember that last transformation specified is first to be applied glMatrixMode(GL_MODELVIEW) glLoadIdentity(); glTranslatef(0.0, 0.0, -d); glRotatef(90.0, 0.0, 1.0, 0.0);

202 202 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 The LookAt Function The GLU library contains the function glLookAt to from the required modelview matrix through a simple interface Note the need for setting an up direction Still need to initialize  Can concatenate with modeling transformations Example: isometric view of cube aligned with axes glMatrixMode(GL_MODELVIEW): glLoadIdentity(); gluLookAt(1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0., 1.0. 0.0);

203 203 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 glLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz)

204 204 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Other Viewing APIs The LookAt function is only one possible API for positioning the camera Others include  View reference point, view plane normal, view up (PHIGS, GKS-3D)  Yaw, pitch, roll  Elevation, azimuth, twist  Direction angles

205 205 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Projections and Normalization The default projection in the eye (camera) frame is orthogonal For points within the default view volume Most graphics systems use view normalization  All other views are converted to the default view by transformations that determine the projection matrix  Allows use of the same pipeline for all views x p = x y p = y z p = 0

206 206 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Homogeneous Coordinate Representation x p = x y p = y z p = 0 w p = 1 p p = Mp M = In practice, we can let M = I and set the z term to zero later

207 207 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Simple Perspective Center of projection at the origin Projection plane z = d, d < 0

208 208 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Perspective Equations Consider top and side views x p =y p = z p = d

209 209 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Homogeneous Coordinate Form M = consider q = Mp where q =  p =

210 210 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Perspective Division However w  1, so we must divide by w to return from homogeneous coordinates This perspective division yields the desired perspective equations We will consider the corresponding clipping volume with the OpenGL functions x p =y p = z p = d

211 211 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 OpenGL Orthogonal Viewing glOrtho(xmin,xmax,ymin,ymax,near,far) glOrtho(left,right,bottom,top,near,far) near and far measured from camera

212 212 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 OpenGL Perspective glFrustum(xmin,xmax,ymin,ymax,near,far)

213 213 Angel: Interactive Computer Graphics 3E © Addison-Wesley 2002 Using Field of View With glFrustum it is often difficult to get the desired view gluPerpective(fovy, aspect, near, far) often provides a better interface aspect = w/h front plane

214 214 Clipping

215 215 You will  understand  What is meant by ‘ clipping ’  2D clipping concepts  3D clipping concepts  Different kinds of clipping  The Cohen-Sutherland 2D region-coding clipping technique  Be able to  calculate Cohen-Sutherland 2D region-coding Learning outcomes for this lecture

216 216 Clipping Clipping means  Identifying portions of a scene that are inside (or outside) a specified region Examples  Multiple viewports on a device  Deciding how much of a games world the player can see

217 217 Clipping Clipping means  Identifying portions of a scene that are inside (or outside) a specified region Examples  Multiple viewports on a device  Deciding how much of a games world the player can see Player can’t see this far yet

218 218 Requirements for clipping Is (x, y) inside or outside a given region For 2D graphics the region defining what is to be clipped is called  The clip window Clip window

219 219 Interior and exterior clipping interior clipping  what is to be saved is inside the clip window exterior clipping  what is to be saved is outside clip window Interior clipping - keep point P2 P2 (x2, y2)

220 220 Interior and exterior clipping We shall assume interior clipping for now  But you must be aware of exterior clipping too Exterior clipping - keep point P1 Clip window P1 (x1, y1)

221 221 Overview of types of clipping All-or-none clipping  If any part of object outside clip window whole object is rejected Point clipping  Only keep points inside clip window Line clipping  Only keep segment of line inside clip window Polygon clipping  Only keep sub-polygons inside clip window

222 222 Before and after POINT clipping Before After

223 223 Before and after LINE clipping Before After

224 224 Before and after POLYGON clipping Before After

225 225 Cohen-Sutherland 2D clipping 4 regions are defined – outside the clip window  TOP  BOTTOM  LEFT  RIGHT

226 226 The 4-bit codes A 4-bit code is assigned to each point This code is sometimes called a Cohen- Sutherland region code LEFT bit 1 = binary 0001 RIGHT bit 2 = binary 0010 BOTTOM bit 3 = binary 0100 TOP bit 4 = binary 1000 So a point coded 0001 is LEFT of the clip window, etc.

227 227 Cohen-Sutherland region codes The point (65, 50) is above and to the right of the clip window, Therefore gets the code: 1010

228 228 Cohen-Sutherland region codes 1000 indicates the TOP region 0010 indicates the RIGHT region the 4 bit Cohen-Sutherland code is formed by a logical OR of all region codes  1000TOP  OR0010 RIGHT  ------------------  =1010

229 229 How the codes are useful Why bother encoding points with 4-bit Cohen-Sutherland region codes? Can make some quick decisions  If code is zero (0000) point is inside window  If code is non-zero point is outside window For the two endpoints of a line  If codes for both endpoints are zero, whole line is inside window  If (logical) AND of codes for endpoints is non-zero, the endpoints must have a region in common … So the whole line must be outside clip window

230 230 Some lines and their endpoint codes Line1 codes are 1001 and 0000 Line2 codes are 0000 and 0000 << inside Line3 codes are 1000 and 0100 Line4 codes are 1010 and 0110 << outside TOP BOTTOM RIGHT LEFT

231 231 Clipping from region codes To clip a line based on region codes:  Choose an endpoint that is OUTSIDE clip window (I.e. non-zero code)  Check first bit (TOP) – if set, clip intersection from point to TOP of clip window  Check second bit (BOTTOM) and so on

232 232 Line Clipping Algorithms Goal: avoid drawing primitives that are outside the viewing window. The most common case: clipping line segments against a rectangular window

233 233 Line Clipping Algorithms Three cases:  Segment is entirely inside the window - Accept  Segment is entirely outside the window - Reject  Segment intersects the boundary - Clip

234 234 Point Classification How can we tell if a point is inside a rectangular window? x min x max y max y min

235 235 Line Segment Clipping If both endpoints are inside the window, the entire segment is inside: trivial accept If one endpoint is inside, and the other is outside, line segment must be split. What happens when both endpoints are outside?

236 236 Cohen-Sutherland Algorithm Assign a 4-digit binary outcode to each of the 9 regions defined by the window: x min x max y max y min 000000100001 0110 10101000 0100 1001 0101

237 237 Cohen-Sutherland Algorithm x min x max y max y min 000000100001 0110 10101000 0100 1001 0101 bit1234condition y > y max y < y min x > x max x < x min

238 238 Compute the outcodes C1 and C2 corresponding to both segment endpoints. If ((C1 | C2) == 0): Trivial Accept If ((C1 & C2) != 0): Trivial Reject Otherwise, split segment into two parts. Reject one part, and repeat the procedure on the remaining part. What edge should be intersected ? Cohen-Sutherland Algorithm

239 239 Example x min x max y max y min A B C D Outcode(A) = 0000 Outcode(D) = 1001 Clip (A,D) with y = y max, splitting it into (A,B) and (B,D) Reject (B,D) Proceed with (A,B) No trivial accept/reject

240 240 Example x min x max y max y min A B C D Outcode(A) = 0100 Outcode(E) = 1010 Clip (A,E) with y = y max, splitting it into (A,D) and (D,E) Reject (D,E) Proceed with (A,D) No trivial accept/reject E

241 241 Example x min x max y max y min A B C D Outcode(A) = 0100 Outcode(D) = 0010 Clip (A,D) with y = y min, splitting it into (A,B) and (B,D) Reject (A,B) Proceed with (B,D) No trivial accept/reject

242 242 Example x min x max y max y min B C D Outcode(B) = 0000 Outcode(D) = 0010 Clip (B,D) with x = x max, splitting it into (B,C) and (C,D) Reject (C,D) Proceed with (B,C) No trivial accept/reject

243 243 Clipping a line Choose point P2 (code is 1000) Clip from point to TOP of clip window

244 244 Clipping a line Choose point P1 (code is 0110) Bit 1 (TOP) not set Bit 2 (BOTTOM) set – so clip bottom

245 245 Clipping a line Bit 3 (RIGHT) set – so clip right Bit 4 (LEFT) not set – so clipping finished

246 246 How to clip a line Need to know  End points of line (x1, y1) – (x2, y2)  X or Y value defining clip window edge (similar triangles and line gradient) m = (y2 – y1) / (x2 – x1); // (gradient) newx = xwmin; newy = y1 + m*(xwmin – x1) xmin (x1, y1) (x2, y2) (newx, newy)

247 247 A line is completely visible if both of its end points are in the window. Brute Force Method - Solve simultaneous equations for intersections of lines with window edges. (x r, y t ) (x l, y t ) (x l, y b )(x r, y b ) A point is visible if x l < x < x r and y b < y < y t (x, y) Clipping Lines

248 248 Region Checks: Trivially reject or accept lines and points. Fast for large windows (everything is inside) and for small windows (everything is outside). Each vertex is assigned a four-bit outcode. Cohen-Sutherland Clipping

249 249 Bit 1: 1 if y > y t, else 0 Bit 2: 1 if y < y b, else 0 Bit 3: 1 if x > x r, else 0 Bit 4: 1 if x < x l, else 0 Bit 1: Above Bit 2: Below Bit 3: Right Bit 4: Left 100110001010 000100000010 010101000110 Cohen-Sutherland Clipping (cont.)

250 250 Cohen-Sutherland Clipping (cont.) A line can be trivially accepted if both endpoints have an outcode of 0000. A line can be trivially rejected if any corresponding bits in the two outcodes are both equal to 1. (This means that both endpoints are to the right, to the left, above, or below the window.) if (outcode 1 & outcode 2) != 0000, trivially reject! Bit 1: Above Bit 2: Below Bit 3: Right Bit 4: Left 100110001010 000100000010 010101000110

251 251 In the case where a line can be neither trivially accepted nor rejected, the algorithm uses a “ divide and conquer ” method. Line AD: 1) Test outcodes of A and D --> can ’ t accept or reject. 2) Calculate intersection point B, which is on the dividing line between the window and the “ above ” region. Form new line segment AB and discard BD because above the window. 3) Test outcodes of A and B. Reject. Line EH: ?? A D B C E FG H Clipping Lines Not Accepted or Rejected

252 252 Polygons can be clipped against each edge of the window one edge at a time. Window/edge intersections, if any, are easy to find since the X or Y coordinates are already known. Vertices which are kept after clipping against one window edge are saved for clipping against the remaining edges. Note that the number of vertices usually changes and will often increase. Polygon Clipping

253 253 The window boundary determines a visible and invisible region. The edge from vertex i to vertex i+1 can be one of four types: Exit visible region - save the intersection Wholly outside visible region- save nothing Enter visible region - save intersection and endpoint Wholly inside visible region - save endpoint P4 I2 P1 I1 P3 P2 P4 I2 I1 P1 Polygon Clipping Algorithm

254 254 Polygon clipping issues The final output, if any, is always considered a single polygon. The spurious edge may not be a problem since it always occurs on a window boundary, but it can be eliminated if necessary.

255 255 Because polygon clipping does not depend on any other polygons, it is possible to arrange the clipping stages in a pipeline. the input polygon is clipped against one edge and any points that are kept are passed on as input to the next stage of the pipeline. This way four polygons can be at different stages of the clipping process simultaneously. This is often implemented in hardware. Clip Top Clip Right Clip Bottom Clip Left Pipelined Polygon Clipping

256 256 A figure illustrating the openGL graphics pipeline: clipping is done here Clipping in the openGL pipeline

257 257 strategies for dealing with text objects Consider following example: Assume interior clipping Text clipping

258 258 Student Exercise Draw three possible results of interior clipping of the string “ ABC ” Try to name what type of clipping you have done in each case

259 259 Student Exercise All-or-none string clipping  No text is retained after clipping since part of text is outside clip window Whole String “ ABC ” is clipped as a single object

260 260 Student Exercise All-or-none character clipping  Only “ B ” and “ C ” are retained after clipping since part of “ A ” is outside clip window Each character is clipped as a separate object

261 261 Student Exercise Character component clipping  All of “ B ” and “ C ” are retained, and those parts of “ A ” inside clip window are also retained Each component of each character is clipped as a separate object

262 262 In 3D a clip volume needs to be defined Example for “ perspective ” 3D We define  Point to project to (viewer ’ s “ eye ” ) Introduction to 3D clipping

263 263 In 3D a clip volume needs to be defined Example for “ perspective ” 3D We define  Window to define direction and amount of view Introduction to 3D clipping

264 264 In 3D a clip volume needs to be defined Example for “ perspective ” 3D We define  2 clip planes to define max and min distance to viewer Introduction to 3D clipping

265 265 In 3D a clip volume needs to be defined Example for “ perspective ” 3D Introduction to 3D clipping

266 266 Result is a finite clip volume of space This shape is a named a frustum Introduction to 3D clipping

267 267 3-D Extension of 2-D Cohen-Sutherland Algorithm, Outcode of six bits. A bit is true (1) when the appropriate condition is satisfied Bit 1 - Point is above view volumey > -z Bit 2 - Point is below view volumey < z Bit 3 - Point is right of view volumex > -z Bit 4 - Point is left of view volumex < z Bit 5 - Point is behind view volumez < -1 Bit 6 - Point is in front of view volumez > zmin Y axis +1 -Z Back Clipping Plane z=-1 Front Clipping Plane y=-z y=z Canonical View Volume

268 268 3D Line Clipping A line is trivially accepted if both endpoints have a code of all zeros. AND A line is trivially rejected if the bit-by-bit logical AND of the codes is not all zeros. Otherwise Calculate intersections. On the y = z plane from parametric equation of the line: y 0 + t( y 1 - y 0 ) = z 0 + t( z 1 + z 0 ) Solve for t and calculate x and y. Already know z = y

269 269 Clipping means  Identifying portions of a scene that are inside (or outside) a specified region Clipping is defined using a clip window  Interior clipping keep things inside clip window / Exterior cl. outside Summary – clipping in general

270 270 Types of clipping  All-or-none (AON) clipping if any part of object outside clip area then reject whole object  Point / line / polygon / text clipping (AON string/char, component)

271 271 3D clipping involves defining a clip volume  A finite volume of space defined by front and back clipping planes, the view plane window and projection method (more details in lecture on 3D)

272 272 A 4-bit encoding for regions related to clip window  TOP  BOTTOM  LEFT  RIGHT Code can be used to easily  To determine if a point in inside clip window  If endpoints of a line mean whole line is fully inside or fully outside clip window Can implement in C++ using char  8-bit, unsigned, data type Summary

273 Clipping endpoints x min < x < x max and y min < y < y max point inside Endpoint analysis for lines:  if both endpoints in, can do “trivial acceptance”  if one endpoint is inside, one outside, must clip  if both endpoints out, don’t know Brute force clip: solve simultaneous equations using y = mx + b for line and four clip edges  slope-intercept formula handles infinite lines only  doesn’t handle vertical lines Line Clipping

274 Divide plane into 9 regions 4 bit outcode records results of four bounds tests: First bit: outside halfplane of top edge, above top edge Second bit: outside halfplane of bottom edge, below bottom edge Third bit: outside halfplane of right edge, to right of right edge Fourth bit: outside halfplane of left edge, to left of left edge Lines with OC 0 = 0 and 0C 1 = 0 can be trivially accepted Lines lying entirely in a half plane on outside of an edge can be trivially rejected: OC 0 & OC 1  0 (i.e., they share an “outside” bit) Outcodes for Cohen-Sutherland Line Clipping

275 If we can neither trivial reject nor accept, divide and conquer: subdivide line into two segments, then can T/A or T/R one or both segments:  use a clip edge to cut the line  use outcodes to choose edge that is crossed: if outcodes differ in the edge’s bit, endpoints must straddle that edge  pick an order for checking edges: top – bottom – right – left  compute the intersection point; the clip edge fixes either x or y, can be substituted into the line equation  iterate for the newly shortened line  “extra” clips may happen, e.g., E-I at H Cohen-Sutherland Algorithm Clip rectangle D C B A E F G H I

276 ComputeOutCode(x0, y0, outcode0) ComputeOutCode(x1, y1, outcode1) repeat check for trivial reject or trivial accept pick the point that is outside the clip rectangle if TOP then x = x0 + (x1 – x0) * (ymax – y0)/(y1 – y0); y = ymax; else if BOTTOM then x = x0 + (x1 – x0) * (ymin – y0)/(y1 – y0); y = ymin; else if RIGHT then y = y0 + (y1 – y0) * (xmax – x0)/(x1 – x0); x = xmax; else if LEFT then y = y0 + (y1 – y0) * (xmin – x0)/(x1 – x0); x = xmin; end {calculate the line segment} if (outcode = outcode0) then x0 = x; y0 = y; ComputeOutCode(x0, y0, outcode0) else x1 = x; y1 = y; ComputeOutCode(x1, y1, outcode1) end {Subdivide} until done Pseudocode for the Cohen- Sutherland Algorithm

277 Line Drawing Draw a line on a raster screen between two points What’s wrong with the statement of the problem?  it doesn’t say anything about which points are allowed as endpoints  it doesn’t give a clear meaning to “draw”  it doesn’t say what constitutes a “line” in the raster world  it doesn’t say how to measure the success of a proposed algorithm Problem Statement Given two points P and Q in the plane, both with integer coordinates, determine which pixels on a raster screen should be on in order to make a picture of a unit-width line segment starting at P and ending at Q Scan Converting Lines

278 Special case: Horizontal Line: Draw pixel P and increment the x coordinate value by one to get the next pixel. Vertical Line: Draw pixel P and increment the y coordinate value by one to get the next pixel. Diagonal Line: Draw pixel P and increment both the x and the y coordinate by one to get the next pixel. What should we do in the general case? Finding the next pixel:

279 The Basic Algorithm Find the equation of the line that connects the two points P and Q Starting with the leftmost point P, increment x i by 1 to calculate y i = mx i + B where m = slope, B = y intercept Intensify the pixel at (x i, Round(y i )) where Round (y i ) = Floor (0.5 + y i ) The Incremental Algorithm: Each iteration requires a floating-point multiplication  therefore, modify. y i+1 = mx i+1 + B = m(x i +  x) + B = y i + m  x If  x = 1, then y i+1 = y i + m At each step, we make incremental calculations based on the preceding step to find the next y value Strategy 1 - Incremental Algorithm (1/2)

280 Strategy 1 - Incremental Algorithm (2/2)

281 Example Code // Incremental Line Algorithm // Assumes – 1 <= m <= 1, x0 < x1 void Line(int x0, int y0, int x1, int y1, int value) { intx, y; floatdy = y1 – y0; floatdx = x1 – x0; floatm = dy / dx; y = y0; for (x = x0; x < x1; x++) { WritePixel(x, Round(y), value); y = y + m; }

282 Rounding integers takes time Variables y and m must be a real or fractional binary because the slope is a fraction  special case needed for vertical lines Problem with the Incremental Algorithm:

283 Assume that the line’s slope is shallow and positive (0 < slope < 1); other slopes can be handled by suitable reflections about the principle axes Call the lower left endpoint (x 0, y 0 ) and the upper right endpoint (x 1, y 1 ) Assume that we have just selected the pixel P at (x p, y p ) Next, we must choose between the pixel to the right (pixel E), or the one right and one up (pixel NE) Let Q be the intersection point of the line being scan-converted with the grid line x = x p +1 Strategy 2 – Midpoint Line Algorithm (1/3)

284 Strategy 2 – Midpoint Line Algorithm (2/3) Previous pixelChoices for current pixel Choices for next pixel E pixel NE pixel Midpoint M Q

285 The line passes between E and NE The point that is closer to the intersection point Q must be chosen Observe on which side of the line the midpoint M lies:  E is closer to the line if the midpoint lies above the line, i.e., the line crosses the bottom half  NE is closer to the line if the midpoint lies below the line, i.e., the line crosses the top half The error, the vertical distance between the chosen pixel and the actual line, is always <= ½ The algorithm chooses NE as the next pixel for the line shown Now, find a way to calculate on which side of the line the midpoint lies Strategy 2 – Midpoint Line Algorithm (3/3)

286 Line equation as a function f(x): f(x) = m*x + B = dy/dx*x + B Line equation as an implicit function: F(x, y) = a*x + b*y + c = 0 for coefficients a, b, c, where a, b ≠ 0 from above, y*dx = dy*x + B*dx so a = dy, b = -dx, c = B*dx, a > 0 for y 0 < y 1 Properties (proof by case analysis): F(x m, y m ) = 0 when any point M is on the line F(x m, y m ) < 0 when any point M is above the line F(x m, y m ) > 0 when any point M is below the line Our decision will be based on the value of the function at the midpoint M at (x p + 1, y p + ½) The Line

287 Decision Variable d: We only need the sign of F(x p + 1, y p + ½) to see where the line lies, and then pick the nearest pixel d = F(x p + 1, y p + ½) - if d > 0 choose pixel NE - if d < 0 choose pixel E - if d = 0 choose either one consistently How to update d: - On the basis of picking E or NE, figure out the location of M for that pixel, and the corresponding value of d for the next grid line Decision Variable

288 M is incremented by one step in the x direction d new = F(x p + 2, y p + ½) = a(x p + 2) + b(y p + ½) + c d old = a(x p + 1) + b(y p + ½) + c Subtract d old from d new to get the incremental difference  E d new = d old + a  E = a = d y Derive the value of the decision variable at the next step incrementally without computing F(M) directly d new = d old +  E = d old + d y  E can be thought of as the correction or update factor to take d old to d new It is referred to as the forward difference If E was chosen:

289 M is incremented by one step each in both the x and y directions d new = F(x p + 2, y p + 3/2) = a(x p + 2) + b(y p + 3/2) + c Subtract d old from d new to get the incremental difference d new = d old + a + b  NE = a + b = dy – dx Thus, incrementally, d new = d old +  NE = d old + dy – dx If NE was chosen:

290 At each step, the algorithm chooses between 2 pixels based on the sign of the decision variable calculated in the previous iteration. It then updates the decision variable by adding either  E or  NE to the old value depending on the choice of pixel. Simple additions only! First pixel is the first endpoint (x 0, y 0 ), so we can directly calculate the initial value of d for choosing between E and NE. Summary (1/2)

291 First midpoint for first d = d start is at (x 0 + 1, y 0 + ½) F(x 0 + 1, y 0 + ½) = a(x 0 + 1) + b(y 0 + ½) + c = a * x 0 + b * y 0 + c + a + b/2 = F(x 0, y 0 ) + b/2 But (x 0, y 0 ) is point on line and F(x 0, y 0 ) = 0 Therefore, d start = a + b/2 = dy – dx/2  use d start to choose the second pixel, etc. To eliminate fraction in d start :  redefine F by multiplying it by 2; F(x,y) = 2(ax + by + c)  this multiplies each constant and the decision variable by 2, but does not change the sign Summary (2/2)

292 Example Code void MidpointLine(int x0, int y0, int x1, int y1, int value) { intdx = x1 - x0; intdy = y1 - y0; intd = 2 * dy - dx; intincrE = 2 * dy; intincrNE = 2 * (dy - dx); intx = x0; inty = y0; writePixel(x, y, value); while (x < x1) { if (d <= 0) {//East Case d = d + incrE; } else {// Northeast Case d = d + incrNE; y++; } x++; writePixel(x, y, value); }/* while */ }/* MidpointLine */

293 293 Tutorial on OpenGL

294 294 Objectives Development of the OpenGL API OpenGL Architecture  OpenGL as a state machine Functions  Types  Formats Simple program

295 295 What is OpenGL? (1/2) A low-level graphics rendering and imaging library  only includes operations which can be accelerated A layer of abstraction between graphics hardware and an application program An API to produce high-quality, color images of 3D objects

296 296 What is OpenGL? (2/2) A procedural rather than a descriptive graphics language An Operating system and Hardware platform independent  X Window System under UNIX  Microsoft Windows or Windows NT  IBM OS/2  Apple Mac OS

297 297 OpenGL Features Texture mapping z-buffering Double buffering Lighting effects Smooth shading Material properties Alpha blending Transformation matrices

298 298 Texture Mapping the ability to apply an image to graphics surface use to rapidly generate realistic images without having to specify an excessive amount of detail ie. create a wooden floor by painting the floor’s rectangular surface with a wood grain texture

299 299 z-buffering the ability to calculate the distance from the viewer’s location make it easy for the program to automatically remove surfaces or parts of surface that are hidden from view At the start, enable the Z-buffer:  glEnable(GL_DEPTH_TEST); Before each drawing, clear the Z-buffer:  glClear (GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER _BIT);

300 300 Double buffering (1/2) support for smooth animation using double buffering drawing into the back buffer while displaying the front buffer and then swapping the buffers when you are ready to display. Enable double-buffering:  glutInitDisplayMode (GLUT_DOUBLE |....);

301 301 Double buffering (2/2) Your drawing is done in the hidden buffer After drawing, swap buffers:  glutSwapBuffers();

302 302 Lighting effects the ability to calculate the effects on the lightness of a surface’s color when different lighting models are applied to the surface from one or more light Three steps:  Enable lighting  Specify the lights  Specify the materials

303 303 Smooth shading the ability to calculate the shading effects that occur when light hits a surface at an angle and results in subtle color differences across the surface this effect is important for making a model look “realistic”

304 304 Material Properties the ability to specify the material properties of a surface  dullness  shininess

305 305 Alpha Blending the ability to specify an alpha or “opacity” value in addition to regular RGB value

306 306 Transformation Matrices the ability to change the location, size and perspective of an object in 3D coordinate space

307 307 How OpenGL works the same way that GDI ( Graphics Device Interface) work whenever a program makes an OpenGL call, the OPENGL32 and GLU32 DLLs are loaded.

308 308 SGI and GL Silicon Graphics (SGI) revolutionized the graphics workstation by implementing the pipeline in hardware (1982) To use the system, application programmers used a library called GL With GL, it was relatively simple to program three dimensional interactive applications

309 309 OpenGL The success of GL lead to OpenGL (1992), a platform- independent API that was  Easy to use  Close enough to the hardware to get excellent performance  Focus on rendering  Omitted windowing and input to avoid window system dependencies

310 310 GLUT OpenGL Utility Library (GLUT)  Provides functionality common to all window systems Open a window Initialize OpenGL State Get input from mouse and keyboard Menus Event-driven  Code is portable but GLUT lacks the functionality of a good toolkit for a specific platform Slide bars  Not official part of OpenGL

311 311 OpenGL Functions Primitives  Points  Line Segments  Polygons Attributes Transformations  Viewing  Modeling Control Input (GLUT)

312 312 OpenGL State OpenGL is a state machine OpenGL functions are of two types  Primitive generating Can cause output if primitive is visible How vertices are processes and appearance of primitive are controlled by the state  State changing Transformation functions Attribute functions

313 313 Lack of Object Orientation OpenGL is not object oriented so that there are multiple functions for a given logical function, e.g. glVertex3f, glVertex2i, glVertex3dv,…..

314 314 OpenGL Command Notation (1/2)  the first optional term in curly braces indicates that this function takes 3 arguments.  the second sets of braces indicates that this function takes 5 possible argument types b = byte, s = short, I = integer, f = float, d = double  the last term in curly braces indicate that a vector form of the command also exists. void glSomeFunction {3} {bsifd} {v} (arguments);

315 315 OpenGL Command Notation (2/2) glVertex3fv(... ) Number of components 2 - (x,y) 3 - (x,y,z) 4 - (x,y,z,w) Data Type b - byte ub - unsigned byte s - short us - unsigned short i - int ui - unsigned int f - float d - double Vector omit “ v ” for scalar form glVertex2f( x, y )

316 316 Preliminaries Header files #include GL enumerated types  for platform independence GLbyte, GLshort, GLushort, GLint, GLuint, GLsizei, GLfloat, GLdouble, GLclampf, GLclampd, GLubyte, GLboolean, GLenum, GLbitfield

317 317 OpenGL #defines Most constants are defined in the include files gl.h, glu.h and glut.h  Note #include should automatically include the others  Examples glBegin(GL_PLOYGON) glClear(GL_COLOR_BUFFER_BIT) include files also define OpenGL data types: Glfloat, Gldouble,….

318 318 A Simple Program Generate a square on a solid background

319 319 simple.c #include void mydisplay(){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); } int main(int argc, char** argv){ glutCreateWindow("simple"); glutDisplayFunc(mydisplay); glutMainLoop(); }

320 320 Event Loop Note that the program defines a display callback function named mydisplay  Every glut program must have a display callback  The display callback is executed whenever OpenGL decides the display must be refreshed, for example when the window is opened  The main function ends with the program entering an event loop

321 321 Defaults simple.c is too simple Makes heavy use of state variable default values for  Viewing  Colors  Window parameters Next version will make the defaults more explicit

322 322 Notes on compilation See website and ftp for examples Unix/linux  Include files usually in …/include/GL  Compile with –lglut –lglu –lgl loader flags  May have to add –L flag for X libraries  Mesa implementation included with most linux distributions  Check web for latest versions of Mesa and glut

323 323 Compilation on Windows Visual C++  Get glut.h, glut32.lib and glut32.dll from web  Create a console application  Add opengl32.lib, glut32.lib, glut32.lib to project settings (under link tab) Borland C similar Cygwin (linux under Windows)  Can use gcc and similar makefile to linux  Use –lopengl32 –lglu32 –lglut32 flags

324 324 The Main Program We begin with the basic elements of how to create a window. OpenGL was intentionally designed to be independent of any Specific window system. As a result, a number of the basic window operations are not provided in OpenGL. Therefore, a separate library called GLUT or OpenGL Utility Toolkit was created to provide these functions. Basically, GLUT provides the necessary tools for requesting windows to be created and providing interaction with I/O devices

325 325 Program Structure Most OpenGL programs have a similar structure that consists of the following functions  main() : defines the callback functions opens one or more windows with the required properties enters event loop (last executable statement)  init() : sets the state variables viewing Attributes  callbacks Display function Input and window functions

326 326 main.c #include int main(int argc, char** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(500,500); glutInitWindowPosition(0,0); glutCreateWindow("simple"); glutDisplayFunc(mydisplay); init(); glutMainLoop(); } includes gl.h define window properties set OpenGL state enter event loop display callback

327 327 GLUT functions glutInit allows application to get command line arguments and initializes system gluInitDisplayMode requests properties of the window (the rendering context)  RGB color  Single buffering  Properties logically ORed together glutWindowSize in pixels glutWindowPosition from top-left corner of display glutCreateWindow create window with title “simple” glutDisplayFunc display callback glutMainLoop enter infinite event loop

328 328 glutInit() The arguments allows application to get command line arguments (argc and argv) and initializes system This procedure must be called before any others. It processes (and removes) command-line arguments that may be of interest to GLUT and the window system and does general initialization of GLUT and OpenGL.

329 329 glutInitDisplayMode() This function performs initializations informing OpenGL how to set up its frame buffer. The argument to glutInitDisplayMode() is a logical-or (using the operator “|”) of a number of possible options, which are given in Table 1.

330 330 glutInitWindowSize() This command specifies the desired width and height of the graphics window. The general form is: glutInitWindowSize(int width, int height) The values are given in numbers of pixels.

331 331 glutInitPosition() This command specifies the location of the upper left corner of the graphics window. The form is glutInitWindowPosition(int x, int y) where the (x, y) coordinates are given relative to the upper left corner of the display. Thus, the arguments (0, 0) places the window in the upper left corner of the display.

332 332 glutCreateWindow() This command actually creates the graphics window. The general form of the command is glutCreateWindowchar(*title) where title is a character string. Each window has a title, and the argument is a string which specifies the window’s title.

333 333 init.c void init() { glClearColor (0.0, 0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 1.0); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); } black clear color opaque window fill with white viewing volume

334 334 Coordinate Systems The units of in glVertex are determined by the application and are called world or problem coordinates The viewing specifications are also in world coordinates and it is the size of the viewing volume that determines what will appear in the image Internally, OpenGL will convert to camera coordinates and later to screen coordinates

335 335 OpenGL Camera OpenGL places a camera at the origin pointing in the negative z direction The default viewing volume is a box centered at the origin with a side of length 2

336 336 Orthographic Viewing z=0 In the default orthographic view, points are projected forward along the z axis onto the plane z=0

337 337 Transformations and Viewing In OpenGL, the projection is carried out by a projection matrix (transformation) There is only one set of transformation functions so we must set the matrix mode first glMatrixMode (GL_PROJECTION) Transformation functions are incremental so we start with an identity matrix and alter it with a projection matrix that gives the view volume glLoadIdentity (); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

338 338 Two- and three-dimensional viewing In glOrtho(left, right, bottom, top, near, far) the near and far distances are measured from the camera Two-dimensional vertex commands place all vertices in the plane z=0 If the application is in two dimensions, we can use the function gluOrtho2D(left, right,bottom,top) In two dimensions, the view or clipping volume becomes a clipping window

339 339 mydisplay.c void mydisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); }

340 340 OpenGL Primitives GL_QUAD_STRIP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_POINTS GL_LINES GL_LINE_LOOP GL_LINE_STRIP GL_TRIANGLES

341 341 Polygon Issues OpenGL will only display polygons correctly that are  Simple: edges cannot cross  Convex: All points on line segment between two points in a polygon are also in the polygon  Flat: all vertices are in the same plane User program must check if above true Triangles satisfy all conditions nonsimple polygon nonconvex polygon

342 342 Attributes Attributes are part of the OpenGL and determine the appearance of objects  Color (points, lines, polygons)  Size and width (points, lines)  Stipple pattern (lines, polygons)  Polygon mode Display as filled: solid color or stipple pattern Display edges

343 343 Constructive Primitives The glBegin() / glEnd() Wrappers all OpenGL descriptions of primitives start with glBegin(xxx), where xxx is an OpenGL- defined constant that identifies the OpenGL primitive.

344 344 Specifying Primitives Primitives are described by their vertices Vertex is a point in space which is used in the construction of a geometric primitive Described by a homogenous coordinate

345 345 Specifying an OpenGL Vertex Recall OpenGL specifies geometric primitives by its vertices glVertex3f( x, y, z ); Different primitives require different numbers of vertices

346 346 Drawing Points glBegin(GL_POINTS); // selection points as the primitive glVertex3f(0.0f, 0.0f, 0.0f); // Specify a point glVertex3f(50.0f, 50.0f, 50.0f); // Specify another point glEnd(); // Done drawing points

347 347 Setting the Point Size void glPointSize(Glfloat size); GLFloat sizes[2]; // Store supported point size range GLFloat step; // Store supported point size increments // Get supported point size range and step size glGetFloatv(GL_POINT_SIZE_RANGE, sizes); glGetFloatv(GL_POINT_SIZE_GRANULARITY, &step);

348 348 Actually Drawing Something... Here’s an OpenGL sequence to draw a square centered around the origin glBegin( GL_QUADS ); glVertex2f( -0.8, -0.8 ); glVertex2f( 0.8, -0.8 ); glVertex2f( 0.8, 0.8 ); glVertex2f( -0.8, 0.8 ); glEnd(); GL_QUADS

349 349 Adding Personality to Primitives State ( or Attributes )  data required for computing colors for primitives Examples  color  reflectivity  surface texture

350 350 Specifying a Vertex’s Color Use the OpenGL color command glColor3f( r, g, b ); Where you specify the color determines how the primitive is shaded  points only get one color

351 351 Opening a Window Using GLUT void main( int argc, char** argv ) { glutInitWindowSize( 512, 512 ); glutInitDisplayMode( GLUT_RGBA ); glutCreateWindow( “my window” ); init(); glutDisplayFunc( drawScene ); glutMainLoop(); }

352 352 OpenGL Initalization We’ll use the init() routine for our one-time OpenGL state initialization  call after window has been created, but before first rendering call void init( void ) { glClearColor( 1.0, 0.0, 0.0, 1.0 ); }

353 353 Drawing Lines in 3D glBegin(GL_LINE_STRIP) glVertex3f(0.0f, 0.0f, 0.0f); // v0 glVertex3f(50.0f, 50.0f, 50.0f); // v1 glEnd(); v0 v1 Y X

354 354 Draw Line in 3D glBegin(GL_LINE_STRIP) glVertex3f(0.0f, 0.0f, 0.0f); // v0 glVertex3f(50.0f, 50.0f, 0.0f); // v1 glVertex3f(50.0f, 100.0f, 0.0f); // v2 glEnd(); glBegin(GL_LINE_LOOP) glVertex3f(0.0f, 0.0f, 0.0f); // v0 glVertex3f(50.0f, 50.0f, 0.0f); // v1 glVertex3f(50.0f, 100.0f, 0.0f); // v2 glEnd(); v0 v1 v2 Y X v0 v1 v2 Y X

355 355 Drawing Triangles in 3D glBegin(GL_TRIANGLES) glVertex2f(0.0f, 0.0f); // v0 glVertex2f(25.0f, 25.0f); // v1 glVertex2f(50.0f, 0.0f); // v2 glEnd(); Choose the Fastest Primitives for Performance Tip Most 3D accelerated hardware is highly optimized for the drawing of triangles. v0v2 v1 Y X

356 356 Winding The combination of order and direction in which the vertices are specified v0v2 v1 Y X v3v4 v5 Clockwise winding (Back facing) Counterclockwise winding (Front Facing)

357 357 Winding (cont) OpenGL by default considers polygons that have counterclockwise winding to be front facing Why so important? you can hide the back of a polygon altogether, or give it a different color and reflective property as well GLFrontFace(GL_CW); // change default winding to clockwise GLFrontFace(GL_CCW); // change back to counterclockwise

358 358 Triangle Strips GL_TRIANGLE_STRIP v0v1 v2 v0v1 v2 v3 v0v1 v2 v3 v4

359 359 Triangle Fans GL_TRIANLGLE_FAN v0 v1 v2 1 2 3 v0 v1 v2 v3 1 2 3 v0 v1 v2 v3 v4 1 2 2 3

360 360 Setting Polygon Colors Colors are specified per vertex, not per polygon glShadeModel(GL_FLAT) glShadeModel(GL_SMOOTH) GL_FLAT tells the OpenGL to fill the polygon with the solid color that was current when the polygon’s last vertex was specified. GL_SMOOTH tells the OpenGl to shade the triangle smoothly from each vertex, attempting to interpolate the colors between those specified for each vertex

361 361 Four-Sided Polygons: Quads v0 v1v3 v2 1 2 3 4 v0 v1 v3 v2 1 2 3 4v0 v1v3 v2v4 v5 1 2 3 4 Example of GL_QUAD Progression of GL_QUAD_STRIP

362 362 General Polygon GL_POLYGON v0v1 v2 v3 v4

363 363 Simple lighting Enable lighting:  glEnable(GL_LIGHTING);  glEnable(GL_LIGHT0); Specify light sources parameters:  glLightfv(GL_LIGHT0,GL_AMBIENT, light_ambient);  glLightfv(GL_LIGHT0,GL_POSITION, light_pos);  glLightfv(GL_LIGHT0,GL_DIFFUSE, light_dif); Plus global ambient light:  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, l_ambient);

364 364 Specifying materials (1/2) One function call for each property:  glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIEN T,mat_amb);  glMaterialfv(GL_FRONT_AND_BACK,GL_DIFFUSE,mat_diff);  glMaterialfv(GL_FRONT_AND_BACK,GL_SPECUL AR,matspec);  glMaterialf(GL_FRONT_AND_BACK,GL_SHININES S,100.0);  glMaterialfv(GL_FRONT_AND_BACK,GL_EMISSIO N,mat_emi);

365 365 Specifying materials (2/2) Also possible using glColor();  glColorMaterial(GL_FRONT,GL_DIFFUSE);  glEnable(GL_COLOR_MATERIAL);  glColor3f(0.14,0.33,0.76);

366 366 Color OpenGL supports two colors model RGBA mode color-index mode violetbluegreenyelloworangered 390 nm720 nm

367 367 The Color Cube Green Red Blue (0,255,0) Yellow (255,255,0) Magenta (255,0,255) Cyan (0,255,255) White (255,255,255) Black (0,0,0)

368 368 Color and Shading Color in RGBA mode is set by specifying the red, green, blue and alpha intensities. alpha = 1 //opaque alpha = 0 // transparent

369 369 RGB color Each color component stored separately in the frame buffer Usually 8 bits per component in buffer Note in glColor3f the color values range from 0.0 (none) to 1.0 (all), while in glColor3ub the values range from 0 to 255

370 370 Indexed Color Colors are indices into tables of RGB values Requires less memory  indices usually 8 bits  not as important now Memory inexpensive Need more colors for shading

371 371 Color and State The color as set by glColor becomes part of the state and will be used until changed  Colors and other attributes are not part of the object but are assigned when the object is rendered We can create conceptual vertex colors by code such as glColor glVertex glColor glVertex

372 372 Setting of color attribute glClearColor(1.0, 1.0, 1.0, 0.0); //Clear color glColor3f(1.0f, 0.0f, 0.0f); // red

373 373 Example of setting color glColor3f(1.0f, 0.0f, 0.0f); // no alpha value form glBegin( GL_TRIANGLEs); glVertex3f( -1.0f, 0.0f, 0.0f); glVertex3f(1.0f, 0.0f, 0.0f); glVertex3f(0.0f, 1.0f, 0.0f); glEnd(); Note that the glColor*() function can be placed inside a glBegin()/glEnd() pair. Therefore you can specify individual colors for each individual vertex

374 374 2 vertices of different color glBegin( GL_TRIANGLEs); glColor3f(1.0f, 0.0f, 0.0f); // red glVertex3f( -1.0f, 0.0f, 0.0f); glColor3f(0.0f, 1.0f, 0.0f); // green glVertex3f(1.0f, 0.0f, 0.0f); glColor3f(0.0f, 0.0f, 1.0f); // blue glVertex3f(0.0f, 1.0f, 0.0f); glEnd(); What happen if 2 vertices have different colors?

375 375 Shading What color is the interior if we specify a different color for each vertex of a primitive? Smooth shading causes the color vary as they do through the color cube from one point to the other Green Red Blue (0,0,0) black (255,255,255) White (128,128,128) Medium Grey

376 376 Shading Model glShadeModel(GL_SMOOTH); glShadeModel(GL_FLAT); Flat shading means that no shading calculations are performed on the interior of primitives.  Generally the color specify by the last vertex except the GL_POLYGON primitive, the color specify by the first vertex.

377 377 Smooth Color Default is smooth shading  OpenGL interpolates vertex colors across visible polygons Alternative is flat shading  Color of first vertex determines fill color glShadeModel (GL_SMOOTH) or GL_FLAT

378 378 Flat Shading in OpenGL If you issue only one glColor() command per primitive glColor3f( r, g, b ); glBegin( GL_TRIANGLES ); glVertex3fv( v1 ); glVertex3fv( v2 ); glVertex3fv( v3 ); glEnd();

379 379 Gouraud Shading in OpenGL However, to get Gouraud, issue a color per vertex glBegin( GL_TRIANGLES ); glColor3fv( c1 ); glVertex3fv( v1 ); glColor3fv( c2 ); glVertex3fv( v2 ); glColor3fv( c3 ); glVertex3fv( v3 ); glEnd();

380 380 Viewports Do not have use the entire window for the image: glViewport(x,y,w,h) Values in pixels (screen coordinates)

381 381 Event-Driven Programming & Callbacks Virtually all interactive graphics programs are event driven. Therefore, a graphics program must be prepared at any time for input from any number of sources, including the mouse, or keyboard, or other graphics devises such as trackballs and joysticks. In OpenGL, this is done through the use of callbacks.

382 382 Callbacks The callbacks are used when the graphics program instructs the system to invoke a particular procedure or functions whenever an event of interest occurs, say, the mouse button is clicked. The graphics program indicates its interest, or registers, for various events. This involves telling the window system which event type we are interested in, and passing it the name of a procedure we have written to handle the event.

383 383 Types of callback Callbacks are used for two purposes: 1.User input events 2.System events User input events: include things such as mouse clicks,the motion of the mouse (without clicking) that is also called passive motion and keyboard hits. NB: The program is only signaled about events that happen to its window. For example, entering text into another window’s dialogue box will not generate a keyboard event for the program.

384 384 Types of callback (1/2) System event: There are a number of different events that are generated by the system such as display event, reshape event, idle event and timer event. display event : a special event that every OpenGL program must handle. A display event is invoked when the system senses that the contents of the window need to be redisplayed, either because: the graphics window has completed its initial creation an obscuring window has moved away, thus revealing all or part of the graphics window

385 385 Types of callback (2/2) The program explicitly requests redrawing, by calling glutPostRedisplay() procedure.

386 386 Types of callback Reshape event: Happens whenever the window shape is altered.The callback provides information on the new size of the window. Idle event: Happens every time the system has nothing to do Timer event: Happens when after the waiting period is over

387 387 Callbacks Table: Common callbacks and the associated registration functions

388 388 Callback Setup int main(int argc, char** argv) {... glutDisplayFunc(myDraw); // set up the callbacks glutReshapeFunc(myReshape); glutMouseFunc(myMouse); glutKeyboardFunc(myKeyboard); glutTimerFunc(20, myTimeOut, 0);... }

389 389 Callback Functions Callback functions depend on the function definition that we create.

390 390 Examples of Callback Functions for SE. void myDraw() { // called to display window //...insert your drawing code here... } void myReshape(int w, int h) { // called if reshaped windowWidth = w; // save new window size windowHeight = h; //...may need to update the projection... glutPostRedisplay(); // request window redisplay } void myTimeOut(int id) { // called if timer event //...advance the state of animation incrementally... glutPostRedisplay(); // request redisplay glutTimerFunc(20, myTimeOut, 0); // request next timer event }

391 391 Callback Function for SE From the example, both the timer and reshape callback invoke the function glutPostRedisplay(). This function informs OpenGL that the state of the scene has changed and should be redrawn

392 392 Example of Callback Functions for User Input Events void myMouse(int b, int s, int x, int y) { switch (b) { // b indicates the button case GLUT_LEFT_BUTTON: if (s == GLUT_DOWN) // button pressed //... else if (s == GLUT_UP) // button released //... break; //... // other button events }

393 393 GLUT Parameters GLUT parameter names associated with mouse events

394 394 Example of Callback Functions for User Input Events // called if keyboard key hit void myKeyboard(unsigned char c, int x, int y) { switch (c) { // c is the key that is hit case ’q’: // ’q’ means quit exit(0); break; //... // other keyboard events }


Download ppt "1 What is Computer Graphics Computer graphics is commonly understood to mean the creation, storage and manipulation of models and images. (Andries van."

Similar presentations


Ads by Google