Presentation is loading. Please wait.

Presentation is loading. Please wait.

2010-1 학기 Chapter 5. Geometric Transformations 1.

Similar presentations


Presentation on theme: "2010-1 학기 Chapter 5. Geometric Transformations 1."— Presentation transcript:

1 2010-1 학기 Chapter 5. Geometric Transformations 1

2 2010-1 학기 Chapter 5. Geometric Transformations 2 Basic Transformations  Translation  물체의 위치를 straight line path 를 따라 한 좌표점에서 다른 좌표점으로 이동시 키는 것  (x, y) -> (x’, y’) 로 이동시킬 때  x’ = x + tx, y’ = y + ty  이때 (tx, ty) 를 translation vector 혹은 shift vector 라고 함  matrix 형태로 2 차원 평행이동식을 쓰면  P’ = P + T  P = x1P’ = x1’T = tx x2x2’ty

3 2010-1 학기 Chapter 5. Geometric Transformations 3 Figure 5-1 Translating a point from position P to position P’ with translation vector T P P’ T

4 2010-1 학기 Chapter 5. Geometric Transformations 4 Figure 5-2 Moving a polygon x y x y

5 2010-1 학기 Chapter 5. Geometric Transformations 5  Rotation  xy plane 에서 물체를 circular path 를 따라 이동시키는 것으로 rotation angle 과 rotation point(pivot point) 가 필요  ( 그림 5-4) 에서  x’ = rcos (  +  ) = rcos  cos  - rsin  sin   y’ = rsin (  +  ) = rcos  sin  + rsin  cos  로 구해짐.  x = rcos , y = rsin  이므로  x’ = xcos  - ysin   y’ = xsin  + ycos   matrix 형태로 표시하면  P’ = R P  R = cos  -sin  sin  cos 

6 2010-1 학기 Chapter 5. Geometric Transformations 6 Figure 5-3 Rotation of an object through angle about a pivot point (Xr, Yr)  P P’ Xr Yr

7 2010-1 학기 Chapter 5. Geometric Transformations 7 Figure 5-4 Rotation of a point from position(x,y) to position (x’, y’) through an angle  (x, y) (x’, y’)  r r

8 2010-1 학기 Chapter 5. Geometric Transformations 8  임의의 pivot position 을 중심으로 한 점을 회전시켰을 때 ( 그림 5-5)  x’ = xr + (x - xr) cos  - (y - yr) sin   y’ = yr + (x - xr) sin  + (y - yr) cos 

9 2010-1 학기 Chapter 5. Geometric Transformations 9 Figure 5-5 Rotating a point from position (x, y) to position (x’, y’) through an angle about rotation point (xr, yr)  (x, y) (x’, y’)  r r (xr, yr)

10 2010-1 학기 Chapter 5. Geometric Transformations 10  Scaling  물체의 크기 변환  각 vertex ( 정점 ) 의 좌표치에 scaling factors 인 sx, sy 를 곱해서 얻음  x’ = x ·sx, y’ = y · sy  matrix 형태로 표현하면 x’ = sx 0 x y’ 0 sy y Or P’ = S · P

11 2010-1 학기 Chapter 5. Geometric Transformations 11 Matrix Representations and Homogeneous Coordinates  basic transformation 을 matrix 형태로 표현하면  P’ = M1 · P + M2  P and P’ -> column vectors  M1-> 2 by 2 array  M2 -> two-element column matrix  final coordinate positions 이 중간의 좌표점을 구하지않고 처음 좌표점에서 직접 구하 는 것이 효과적이다 이를 위해 M2 와 관련된 matrix addition 을 없애는 것이 필요  2 by 2 matrix representation 을 3 by 3 matrix representation 으로 바꾸어  모든 transformation equation 을 matrix multiplication 으로 나타낼 수 있도록 함

12 2010-1 학기 Chapter 5. Geometric Transformations 12  two-dimensional transformation 을 a matrix multiplication 으로 표현하기 위해서  각 coordinate position (x, y) 를 homogeneous coordinate triple (xh, yh, h) 로 나타낸 다. ( 이때 x = xh / h, y = yh /h)  가장 간단한 형태로는 2 차원 점의 위치를 (x, y, 1) 로 표현하는 것

13 2010-1 학기 Chapter 5. Geometric Transformations 13  Translation x’ 1 0 tx x y’ = 0 1 ty · y 1 0 0 1 1  Rotation x’ cos  -sin  0 x y’ = sin  cos  0 · y 1 0 0 1 1  Scaling x’ sx 0 0 x y’ = 0 sy 0 · y 1 0 0 1 1

14 2010-1 학기 Chapter 5. Geometric Transformations 14 Figure 5-7 A line scaled using sx = sy = 0.5

15 2010-1 학기 Chapter 5. Geometric Transformations 15 Figure 5-8 Scaling relative to a chosen fixed point (xf, yf) P1 P2 P3 (xf, yf)

16 2010-1 학기 Chapter 5. Geometric Transformations 16 Composite Transformation  Translations  두 개 연속된 translation vectors (tx1, ty1), (tx2, ty2) 가 점 P 에 적용되면  P’ = T(tx2, ty2) · {T(tx1, ty1) · P}  = { T(tx2, ty2) · T(tx1, ty1)} · P 로 계산됨  여기에서 P 와 P’ 는 homogeneous-coordinate column vectors 로 나타냄  composite translation matrix 는 1 0 tx2 1 0 tx1 1 0 tx1+tx2 0 1 ty2 · 0 1 ty1 = 0 1 ty1+ty2 0 0 1 0 0 1 0 0 1 Or  T(x2, ty2) · T(x1, ty1) = T(x1+tx2, ty1+ty2)

17 2010-1 학기 Chapter 5. Geometric Transformations 17  Rotations  Two successive rotations applied to point P: P’ = R(  2) · {R(  1) · P} = {R(  2) · R(  1)} · P = R(  1 +  2) · P  Scaling  Two successive scaling operations: sx2 0 0 sx1 0 0 sx1 ·sx2 0 0 0 sx2 0 · 0 sy1 0 = 0 sy1 · sy2 0 0 0 1 0 0 1 0 0 1 Or  S(sx2, sy2) · S(sx1, sy1) = S(sx1 · sx2, sy1 · sy2)

18 2010-1 학기 Chapter 5. Geometric Transformations 18  General pivot point rotation ( 그림 5-9) 1) 회전의 중심점을 원점으로 이동시킨다 2) 원점을 중심으로 물체를 회전시킨다 3) 중심점을 원래의 점으로 이동시킨다  composite transformation matrix:  회전의 중심점 (pivot point) 가 (xr, yr) 일때 1 0 xr cos  -sin  0 1 0 -xr 0 1 yr · sin  cos  0 · 0 1 -yr 0 0 1 0 0 1 0 0 1

19 2010-1 학기 Chapter 5. Geometric Transformations 19 Figure 5-9 A transformation sequence for rotating an object about a specified pivot point (xr, yr)

20 2010-1 학기 Chapter 5. Geometric Transformations 20 cos  -sin  xr(1-cos  )+yr sin  = sin  cos  yr(1-cos  )-xr sin  0 0 1

21 2010-1 학기 Chapter 5. Geometric Transformations 21 General Fixed-Point Scaling ( 그림 5-10)  계산순서  고정점이 원점에 위치하도록 이동한다  원점에 대해 물체의 크기 변환 계산을 한다  물체를 원래의 고정점으로 이동한다. 1 0 xf sx 0 0 1 0 -xf sx 0 xf(1-sx) 0 1 yf · 0 sy 0 · 0 1 -yf = 0 sy yf(1-sy) 0 0 1 0 0 1

22 2010-1 학기 Chapter 5. Geometric Transformations 22 Figure 5-10 A transformation sequence for scaling an object about a specified fixed point (xr, yr)

23 2010-1 학기 Chapter 5. Geometric Transformations 23 General Scaling Direction ( 그림 5-11)  x, y direction 이 아닌 임의의 방향으로 물체의 크기를 조정하기 위해선 원하는 방향 축을 원점으로 회전시킨후에 scaling transformation 을 적용한다. R -1 (  ) · S(s1, s2) · R(  ) s1cos 2  +s2sin 2  (s2-s1)cos  sin  0 = (s2-s1)cos  sin  s1sin 2  +s2cos 2  0 0 0 1

24 2010-1 학기 Chapter 5. Geometric Transformations 24 Figure 5-11 Scaling parameters s1 and s2 are to be applied in orthogonal directions defined by the angular displacement  x y s1 s2 

25 2010-1 학기 Chapter 5. Geometric Transformations 25  rigid-body transformation matrix: translation 과 rotation 만 포함하는 경우 rxx rxy trx ryx ryy try 0 0 1  윗 부분의 2 by 2 submatrix 는 orthogonal matrix 이다  두 벡터 (rxx, rxy), (ryx, ryy) 가 서로 수직인 단위벡터를 형성 : 1) 각 벡터는 단위 길이를 가지며 r xx 2 + r xy 2 = r yx 2 + r yy 2 = 1 2) 두 벡터는 서로 수직이다 (dot product 가 0) r xx r yx + r xy r yy = 0

26 2010-1 학기 Chapter 5. Geometric Transformations 26 Other Transformations  Reflection ( 그림 5-16)( 그림 5-17)  물체의 miror image 를 계산  반사축을 중심으로 180 도 회전하여 구함  x-axis (y = 0) 을 중심으로 한 reflection 을 위한 transformation matrix 1 0 0 0 -1 0 0 0 1  reflection about y axis -1 0 0 0 1 0 0 0 1

27 2010-1 학기 Chapter 5. Geometric Transformations 27 Figure 5-16 Reflection of an object about the x-axis Original Position Reflected Position

28 2010-1 학기 Chapter 5. Geometric Transformations 28 Figure 5-17 Reflection of an object about y-axix Original Position Reflected Position

29 2010-1 학기 Chapter 5. Geometric Transformations 29  reflection relative to origin -1 0 0 0 -1 0 0 0 1  reflection about y=x ( 그림 5-21) 1) 시계방향으로 45 도 회전하여 y=x 선을 x 축에 일치시킨다. 2) x 축을 중심으로한 반사를 구함 3) y=x 선을 반시계방향으로 45 도 회전

30 2010-1 학기 Chapter 5. Geometric Transformations 30 Figure 5-21 Sequence of transformations to produce reflection about the line y = x y = x  y = x 

31 2010-1 학기 Chapter 5. Geometric Transformations 31  Shear ( 그림 5-23)( 그림 5-25)  물체의 내부가 미끄러진 형태로 모양을 변형시키는 것  x-direction shear relative to x-axis 1 shx 0 0 1 0 0 0 1  x ‘ = x + shx * y  y’ = y  x-diretcion shear relative to the line y = yref 1 shx -shx*yref 0 1 0 0 0 1

32 2010-1 학기 Chapter 5. Geometric Transformations 32  y-direction shear relative to the line x = xref 1 0 0 shy 1 -shy*xref 0 0 1

33 2010-1 학기 Chapter 5. Geometric Transformations 33 Figure 5-23 x-direction shear

34 2010-1 학기 Chapter 5. Geometric Transformations 34 Figure 5-24 y-direction shear

35 2010-1 학기 Chapter 5. Geometric Transformations 35 Raster Methods for Geometric Transformations  사각형의 pixel array 를 다루는 raster functions 을 raster ops 라고 한다.  block transfer: 픽셀 블럭을 한 위치에서 다른 위치로 이동시키는 것  bilevel system 에서는 bitBlt (bit-block transfer) 라고 부름  그래픽스 패키지에서 제공하는 raster functions  copy: 한 픽셀 블럭을 한 위치에서 다른 위치로 이동시킴  read: 픽셀 블럭을 지정된 배열에 저장함  write: 픽셀 배열을 프레임버퍼내 한 위치로 보냄  pixel value 를 결합시키는 처리로 :  replace: pixel values 가 목적지에 이동됨  Boolean operations: and, or, exclusive-or  Rotations  raster scaling of a block of pixels

36 2010-1 학기 Chapter 5. Geometric Transformations 36 OpenGL Raster Transformations  glCopyPixels (xmin, ymin, width, height, GL_COLOR);  glReadPixels (xmin, ymin, width, height, GL_RGB, GL_UNSIGNED_BYTE, colorArray); // or GL_COLOR_INDEX  glDrawPixels (width, height, GL_RGB, GL_UNSIGNED_BYTE, colorArray); // current raster position  glPixelZoom (sx, sy);

37 2010-1 학기 Chapter 5. Geometric Transformations 37 Figure 5-26 Translating an object from screen position to the destination postion P min P max P0P0

38 2010-1 학기 Chapter 5. Geometric Transformations 38 Figure 5-27 Rotating an array of pixel values 12 3 45 6 78 9 10 11 12 36 9 12 25 8 11 1 4 7 10 1211 10 9 8 7 6 5 4 3 2 1 90° counterclockwise rotation 180° counterclockwise rotation

39 2010-1 학기 Chapter 5. Geometric Transformations 39 Transformations between two-dimensional coordinate systems  xy coordinates 에서 x’y’ coordinates 로 바뀌기 위해선 x’y’ 축을 xy 축에 겹쳐놓는 작 업이 필요하다  x’y’ system 의 원점을 xy sytem 의 원점으로 이동시킨다 ( 그림 5-31)  x’ 축을 x 축까지 회전시킨다.  transformation matrix :  M xy,x’y’ = R(-  ) · T(-x0, -y0)

40 2010-1 학기 Chapter 5. Geometric Transformations 40 Figure 5-30 Cartesian x’y’ system x0 y0  x’ axis y’ axis

41 2010-1 학기 Chapter 5. Geometric Transformations 41 Figure 5-31 Position of the reference frames after translating the origin x0 y0  x’ axis y’ axis

42 2010-1 학기 Chapter 5. Geometric Transformations 42  또 다른 방법으로, positive y’ 방향을 나타내는 벡터 V 를 지정한다 ( 그림 5- 32)  y’ 방향의 단위벡터는 v = V = (vx, vy) |V|  x’ 축의 단위벡터 u 는 v 를 90 도 회전하여 구해짐 u = (vy, -vx) = (ux, uy)  rotation matrix 는 orthogonal unit vectors 로 나타낼 수 있으므로 x’y’ system 을 xy system 으로 회전하는데 필요한 matrix 는 ux uy 0 R = vx vy 0 0 0 1 가 된다.

43 2010-1 학기 Chapter 5. Geometric Transformations 43 Figure 5-32 Cartesian system x’y’ with origin at P0 = (x0, y0) x0 y0 x’ axis y’ axis P0 V

44 2010-1 학기 Chapter 5. Geometric Transformations 44  응용에 따라 벡터 V 를 다음과 같이 정의하여 사용 ( 그림 5-33) v = P1 - P0 |P1 - P0|

45 2010-1 학기 Chapter 5. Geometric Transformations 45 Figure 5-33 A Cartesian x’y’ system defined with two coordinate positions, p0 and p1 x0 y0 x’ axis y’ axis P0 V = P1 – P0 P1

46 2010-1 학기 Chapter 5. Geometric Transformations 46 Three-Dimensional Translation  position P = (x, y, z) 에서 P’ = (x’, y’, z’) 로 이동시키는 matrix operation 은 x’ 1 0 0 tx x y’ = 0 1 0 ty · y z’ 0 0 1 tz z 1 0 0 0 1 1  혹은  P’ = T · P 로 나타냄

47 2010-1 학기 Chapter 5. Geometric Transformations 47 Figure 5-34 Moving a coordinate position (x, y, z) (x’, y’, z’) T = (tx, ty, tz) x-axis y-axis z-axis

48 2010-1 학기 Chapter 5. Geometric Transformations 48 Figure 5-35 Shifting the position of a three-dimensional object (x, y, z) (x’, y’, z’) T = (tx, ty, tz) x-axis y-axis z-axis

49 2010-1 학기 Chapter 5. Geometric Transformations 49 Three-Dimensional Rotation  positive rotations angles: coordinate axis 를 중심으로 counterclockwise rotations 의 각 도 의미  coordinate axis rotations  z-axis rotation  x’ = xcos  - ysin   y’ = xsin  + ycos   z’ = z  homogeneous form 으로 나타내면 x’ cos  -sin  0 0 x y’ = sin  cos  0 1 · y z’ 0 0 1 0 z 1 0 0 0 1 1

50 2010-1 학기 Chapter 5. Geometric Transformations 50 Figure 5-36 Positive rotations about a coordinate axis x-axis y-axis z-axis x-axis y-axis z-axis x-axis y-axis z-axis

51 2010-1 학기 Chapter 5. Geometric Transformations 51 Figure 5-37 Rotation of an object about the z axis x z y

52 2010-1 학기 Chapter 5. Geometric Transformations 52  or P’ = Rz(  ) · P  x-axis rotation  y’ = ycos  - zsin   z’ = ysin  + zcos   x’ = x  homogeneous form 으로 나타내면 x’ 1 0 0 0 x y’ = 0 cos  -sin  1 · y z’ 0 sin  cos  0 z 1 0 0 0 1 1 or  P’ = Rx(  ) · P

53 2010-1 학기 Chapter 5. Geometric Transformations 53  y-axis rotation  z’ = zcos  - xsin   x’ = zsin  + xcos   y’ = y  homogeneous matrix form 으로 나타내면 x’ cos  0 sin  0 x y’ = 0 1 0 0 · y z’ -sin  0 cos  0 z 1 0 0 0 1 1 or P’ = Ry(  ) · P

54 2010-1 학기 Chapter 5. Geometric Transformations 54 General Three-Dimensional Rotations  one of coordinate axes 와 평행한 축을 중심으로 회전한 경우 1) rotation axis 가 parallel coordinate axis 에 일치하도록 object 를 이동시킨다 2) rotation axis 를 중심으로 회전 3) rotation axis 를 원래 위치로 이동  P’ = T -1 Rx(  ) T P

55 2010-1 학기 Chapter 5. Geometric Transformations 55 Figure 5-41 Sequence of transformations for rotating an object about an axis that is parallel to the axis x y z Rotation axis x y z x y z x y z (a) original position of object (b) rotate object through angle  (c) translate rotation axis onto x axis (d) translate rotaion axis to original position

56 2010-1 학기 Chapter 5. Geometric Transformations 56  one of coordinate axes 에 평행하지 않은 일반 축을 중심으로 회전한 경우 1) rotation axis 가 coordinate origin 을 통과하도록 object 를 이동 2) rotation axis 가 one of coordinate axes 와 일치하도록 object 를 회전 3) coordinate axis 를 중심으로 회전 4) rotation axis 가 원래의 방향으로 돌아오도록 inverse rotations 수행 5) rotation axis 가 원래의 위치로 돌아오도록 inverse translation 수행

57 2010-1 학기 Chapter 5. Geometric Transformations 57 Figure 5-42 Five transformation steps for obtaining a composite matrix p1 p2 x y z Initial position p1’ p2 x y z Step1 translate p1 to the origin p1 p2” x y z Step2 rotate p2’ onto the z axis p1 p2” x y z Step3 rotate the object around the z axis p1’ p2 x y z Step4 rotate the axis to the original orientation p1 p2 x y z Step5 translate the rotation axis to the original position

58 2010-1 학기 Chapter 5. Geometric Transformations 58  rotation axis 정의 ( 그림 5-43)  two coordinate positions 으로 정의 V = P 2 - P 1 = (x2- x1, y2- y1, z2 - z1)  rotation axis 의 unit vector u V U = = (a, b, c) |V| where a, b, c 는 rotation axis 의 direction cosines 로 다음과 같이 정의됨 x2 - x1 y2 - y1 z2 - z1 a = b = c = |V| |V| |V|

59 2010-1 학기 Chapter 5. Geometric Transformations 59 Figure 5-43 An axis of rotation defined with points P1 and P2 p1 p2 u x y z

60 2010-1 학기 Chapter 5. Geometric Transformations 60 Figure 5-44 Translation of the rotation axis to the coordinate origin x y z u

61 2010-1 학기 Chapter 5. Geometric Transformations 61 Figure 5-45 Unit vector u is rotated about the x axis bring it into the xz plane (a), then it is rotated around the y axis to align it with z axis (b) x y z u  x y z  u (a)(b)

62 2010-1 학기 Chapter 5. Geometric Transformations 62 Figure 5-46 Rotation of u around the x axis into the xz plane is accomplished by rotating u’ (the projection of u in the yz plane) through angle  onto the z axis x y z u u’  u z = (0, 0, 1)

63 2010-1 학기 Chapter 5. Geometric Transformations 63 Scalar product of two vectors: V1 V2 = |V1| |V2| cos  Vector product of two vectors: V1 X V2 = u |V1| |V2| sin  ux uy uz V1 X V2 = V 1x V 1y V 1z V 2x V 2y V 2z u’ = (0, b, c) Cos  = = u’ uz | u’| |uz| d c d = b 2 + c 2 uz = (0, 0, 1) u’ X uz = ux |u’| |uz| sin  u’ X uz = ux b x y z u u’  u z = (0, 0, 1)

64 2010-1 학기 Chapter 5. Geometric Transformations 64 d sin  = b sin  = d b Rx(  ) = 1 0 0 0 0 c/d -b/d 0 0 b/d c/d 0 0 0 0 1 u’ X uz = ux |u’| |uz| sin  u’ X uz = ux b Scalar product of two vectors: V1 V2 = |V1| |V2| cos  Vector product of two vectors: V1 X V2 = u |V1| |V2| sin  ux uy uz V1 X V2 = V 1x V 1y V 1z V 2x V 2y V 2z x y z u u’  u z = (0, 0, 1)

65 2010-1 학기 Chapter 5. Geometric Transformations 65 x  u” = (a, 0, d) uz = (0, 0, 1) Cos  = = d u” uz |u”| |uz| |uz| = |u”| = 1 u” X uz = uy |u”| |uz| sin  u” X uz = uy · (-a) sin  = -a Scalar product of two vectors: V1 V2 = |V1| |V2| cos  Vector product of two vectors: V1 X V2 = u |V1| |V2| sin  ux uy uz V1 X V2 = V 1x V 1y V 1z V 2x V 2y V 2z y

66 2010-1 학기 Chapter 5. Geometric Transformations 66  전 과정에 필요한 matrix 표현 : 책 반드시 참고  R(  ) = T -1 Rx -1 (  ) Ry -1 (  ) Rz(  ) Ry(  ) Rx(  ) T Ry(  ) = d 0 -a 0 0 1 0 0 a 0 d 0 0 0 0 1

67 2010-1 학기 Chapter 5. Geometric Transformations 67 5-12 Three-Dimensional Scaling  Scaling transformation matrix x’ Sx 0 0 0 x y’ = 0 Sy 0 0 y z’ 0 0 Sz 1 z 1 0 0 0 1 1

68 2010-1 학기 Chapter 5. Geometric Transformations 68 Figure 5-50 Doubling the size of an object x y z

69 2010-1 학기 Chapter 5. Geometric Transformations 69  fixed position (xf, yf, zf) 에서의 scaling 1) fixed position 을 원점으로 이동 2) 원점에 대해 scaling 3) fixed position 을 원래의 위치로 이동 sx 0 0 (1-sx)xf T(xf, yf, zf) S(sx, sy, sz) T(-xf, -yf, -zf) = 0 sy 0 (1-sy) yf 0 0 sz (1-sz)zf 0 0 0 1

70 2010-1 학기 Chapter 5. Geometric Transformations 70 Figure 5-51 A sequence of transformations for scaling an object relative to a selected fixed point (xf, yf, zf) (a) (xf, yf, zf) (b) (xf, yf, zf) (c) (xf, yf, zf) (d)

71 2010-1 학기 Chapter 5. Geometric Transformations 71 Other Three-Dimensional Transformations  Reflections  3D reflection 은 reflection axis 혹은 reflection plane 에 대해 처리됨  reflection axis 의 경우엔 180 도 회전과 같고 reflection plane 의 경우엔 4 차원 공간 에서 180 도 회전과 같다. Reflection plane 이 xy, xz, yz 등 coordinate axis 의 경우엔 left-handed and right handed coordinate system 간의 변환과 같다.  Right-handed system 에서 left-handed system 으로 변환하는 reflection 은 x, y coordinates 는 변화가 없고 z coordinates 의 부호만 바뀌는 결과를 가져옴 1 0 0 0 0 1 0 0 RFz = 0 0 -1 0 0 0 0 1  xy plane 에 대한 reflection 을 위한 매트릭스

72 2010-1 학기 Chapter 5. Geometric Transformations 72 Figure 5-52 Conversion of coordinate specifications from a right-handed to a left-handed system x y z x y z Reflection relative to the xy plane

73 2010-1 학기 Chapter 5. Geometric Transformations 73  Shears  z-axis shear 1 0 a 0 0 1 b 0 SHz = 0 0 1 0 0 0 0 1  => z value 에 비례하여 x, y coordinate values 를 변화시킴 => z 값은 그대로 유지하고 x, y 값만 바뀜

74 2010-1 학기 Chapter 5. Geometric Transformations 74 Affine Transformation  x’ = a xx x + a xy y + b x  y’ = a yx x + a yy y + b y  의 형태로 변환되는 것을 2 차원 affine transformation 이라고 함  affine transformation 의 성질  parallel lines 은 parallel lines 로 변화되고  finite points 는 finite points 로 매핑됨  translation, rotation, scaling, reflection, shear: two-dimensional affine transformation 의 대표적인 예  또 다른 예로 두 좌표계의 변환 등이 포함됨

75 2010-1 학기 Chapter 5. Geometric Transformations 75 OpenGL Geometric-Transformation Functions  Basic OpenGL Geometric Transformations  glTranslate* (tx, ty, tz); // *: d or f (double or float)  glTranslatef (25.0, -10.0, 0.0);  glRotate* (theta, vx, vy, vz); // vx, vy, vz: 원점을 통과하는 회전축 방향 지정 // *: d or f (double or float), rotation angle in degrees  glRotatef (90.0, 0.0, 0.0, 1.0);  glScale* (sx, sy, sz); 

76 2010-1 학기 Chapter 5. Geometric Transformations 76  OpenGL Matrix Operations  set up a matrix for the geometric Transformation  modelview matrix 사용  glMatrixMode (GL_MODELVIEW); // 4 by 4 modelview matrix 를 current matrix 로 // other modes: projection mode, texture mode, color mode  glLoadIdentity ( ); // identity matrix 를 current matrix 로  glLoadMatrix* (elements16); // current matrix 의 elements 를 다른 값으로 지정 // single-subscripted, 16-element array(floating-point values) 를 //elements16 으로 지정 glMatrixMode (GL_MODELVIEW); GLFloat elems [16]; GLint k;

77 2010-1 학기 Chapter 5. Geometric Transformations 77 For (k = 0; k < 16; k++) elems [k] = float (k); GlLoadMatrixf (elems); => 결과 matrix: 0.0 4.0 8.0 12.0 M = 1.0 5.0 9.0 13.0 2.0 6.0 10.0 14.0 3.0 7.0 11.0 15.0

78 2010-1 학기 Chapter 5. Geometric Transformations 78 glMultMatrix* (otherelements16); // current matrix 가 otherelements16 으로 // 만들어진 matrix 와 곱해짐 // M = M  M’ glMatrixMode (GL_MODELVIEW); glLoadIdentity ( ); glMultMatrixf (elemsM2); glMultMatrixf (elemsM1); => M = M 2  M 1

79 2010-1 학기 Chapter 5. Geometric Transformations 79  주의점 : OpenGL 은 column-major 로 matrix element 를 저장  즉, OpenGL 에서 m jk 는 column j 중 row k 라는 점  일반 matrix 와는 반대  16-elements single-subscripted array 로 matrix 를 지정하므로써 혼란을 피함  OpenGL Matrix Stacks  multiple views and transformation sequences 의 경우 각각에 대해 composite matrix 를 스택에 저장, 32 개 스택까지 가능  modelview 스택의 수를 정할 수 있음  glGetIntegerv (GL_MAX_MODELVIEW_STACK_DEPTH, stackSize);  glPushMatrix ( ); // current matrix 를 스택의 top 에 둠  glPopMatrix ( ); // 스택의 top 에 있는 matrix 를 없앰

80 2010-1 학기 Chapter 5. Geometric Transformations 80 OpenGL Geometric Transformation Example # include void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); glMatrixMode (GL_PROJECTION); gluOrtho2D (-200.0, 200.0, -200.0, 200.0); //glMatrixMode (GL_MODELVIEW); } void displayFcn (void) {

81 2010-1 학기 Chapter 5. Geometric Transformations 81 glClear(GL_COLOR_BUFFER_BIT); glMatrixMode (GL_MODELVIEW); glColor3f(0.0, 0.0, 1.0); glRecti(50, 100, 200, 150); glColor3f(1.0, 0.0, 0.0); glTranslatef(-100.0, -100.0, 0.0); glRecti(50, 100, 200, 150);

82 2010-1 학기 Chapter 5. Geometric Transformations 82 glLoadIdentity(); glRotatef(90.0, 0.0, 0.0, 1.0); glRecti(50, 100, 200, 150); glLoadIdentity(); glScalef(-0.5, 1.0, 1.0); glRecti(50, 100, 200, 200); glFlush(); }

83 2010-1 학기 Chapter 5. Geometric Transformations 83 void main(int argc, char **argv) { glutInit (&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(50, 50); glutInitWindowSize(600, 300); glutCreateWindow("GL_MODELVIEW Example"); init(); glutDisplayFunc(displayFcn); glutMainLoop(); }

84 2010-1 학기 Chapter 5. Geometric Transformations 84

85 2010-1 학기 Chapter 5. Geometric Transformations 85 Composite-transformation Example # include class wcPt2D { public: GLfloat x, y; }; class wcPt3D { public: GLfloat x, y, z; }; void init (void) {

86 2010-1 학기 Chapter 5. Geometric Transformations 86 glClearColor (1.0, 1.0, 1.0, 0.0); glMatrixMode (GL_PROJECTION); gluOrtho2D (-100.0, 100.0, -100.0, 100.0); glMatrixMode (GL_MODELVIEW); } void triangle (wcPt2D *verts) { GLint k; glBegin (GL_TRIANGLES); for (k = 0; k < 3; k++) glVertex2f (verts[k].x, verts[k].y); glEnd (); }

87 2010-1 학기 Chapter 5. Geometric Transformations 87 /* Procedure for generating a matrix for rotation about an axis defined with points p1 and p2 */ void rotate3D (wcPt3D p1, wcPt3D p2, GLfloat thetaDegrees) { float vx = (p2.x - p1.x); float vy = (p2.y - p1.y); float vz = (p2.z - p1.z); glTranslatef(p1.x, p1.y, p1.z); glRotatef(thetaDegrees, vx, vy, vz); glTranslatef(-p1.x, -p1.y, -p1.z); }

88 2010-1 학기 Chapter 5. Geometric Transformations 88 /* Procedure for generating a matrix for a scaling transformation with respect to an arbitrary fixed point */ void scale3D (GLfloat sx, GLfloat sy, GLfloat sz, wcPt3D fixedPt) { glTranslatef(fixedPt.x, fixedPt.y, fixedPt.z); glScalef(sx, sy, sz); glTranslatef(-fixedPt.x, -fixedPt.y, -fixedPt.z); } void displayFcn (void) { wcPt2D verts [3] = {{-50.0, -25.0}, {50.0, -25.0}, {0.0, 50.0}}; wcPt3D fixedPt = {1.0, 1.0, 0.0}; wcPt3D p1 = {0.0, 0.0, 0.0}, p2 = {1.0, 0.0, 0.0}; GLfloat thetaDegrees = 10.0;

89 2010-1 학기 Chapter 5. Geometric Transformations 89 glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.0, 0.0, 1.0); glViewport(0, 0, 500, 400); triangle(verts); glColor3f(1.0, 0.0, 0.0); scale3D(0.5, 0.5, 0.5, fixedPt); rotate3D(p1, p2, thetaDegrees); triangle(verts); glFlush(); }

90 2010-1 학기 Chapter 5. Geometric Transformations 90 void main(int argc, char **argv) { glutInit (&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowPosition(50, 50); glutInitWindowSize(600, 500); glutCreateWindow("Geo-Trans Example"); init(); glutDisplayFunc(displayFcn); glutMainLoop(); }

91 2010-1 학기 Chapter 5. Geometric Transformations 91


Download ppt "2010-1 학기 Chapter 5. Geometric Transformations 1."

Similar presentations


Ads by Google