Download presentation
Presentation is loading. Please wait.
Published byNathan Wade Modified over 9 years ago
1
GRAFIKA KOMPUTER ~ M. Ali Fauzi
2
Drawing 2 D Graphics
3
VIEWPORT TRANSFORMATION
4
Recall :Coordinate System glutReshapeFunc(reshape); void reshape(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); }
5
World Coordinate System
6
00 1 2 -2 1 2
7
World Coordinate System ~ The representation of an object is measured in some physical or abstract units. ~ Space in which the object geometry is defined.
8
World Window 0 1 2 -2 1 2
9
World Window 0 1 2 -2 1 2
10
World Window ~ Rectangle defining the part of the world we wish to display. ~ Area that can be seen (what is captured by the camera), measured in OpenGL coordinates.
11
World Window ~ Known as clipping-area void reshape(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); }
12
The Default The default OpenGL 2D clipping-area is an orthographic view with x and y in the range of -1.0 and 1.0, i.e., a 2x2 square with centered at the origin.
13
World Window ~ Reset to the default void reshape(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); }
14
Viewport Screen window Interface Window Viewport
15
Screen Coordinate System ~ Space in which the image is displayed ~ For example : 800 x 600 pixels
16
Interface Window ~ Visual representation of the screen coordinate system for windowed displays glutInitWindowSize(320, 320); glutInitWindowPosition(50, 50);
17
Vewport ~ A rectangle on the interface window defining where the image will appear, ~ The default is the entire screen or interface window.
18
Viewport
19
Interface Window ~ Set the viewport to the entire screen / window void reshape(int w, int h) { glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); }
20
Interface Window ~ Set the viewport to half of the screen / window glutInitWindowSize(320, 320); glutInitWindowPosition(50, 50); -------------------------------- glViewport(0,0,160,160);
21
Viewport Screen window Interface Window Viewport
23
Viewport Transformation ~ The Process called viewport transformation
24
THE ASPECT RATIO PROBLEM
25
The distortion Screen window Interface Window Viewport
26
The distortion Screen window Interface Window Viewport
27
Ratio ~ R = Aspect Ratio of World
28
Ratio
29
Keeping the Ratio Screen window Interface Window Viewport
30
Keeping the Ratio Screen window Interface Window Viewport
31
The Startegy ~ To avoid distortion, we must change the size of the world window accordingly. ~ For that, we assume that the initial world window is a square with side length L
32
The Startegy ~ Default glOrtho2D (-L, L, -L, L); ~ For example L=1, glOrtho2D (-1, 1, -1, 1);
33
The Startegy if (w <= h) glOrtho2D(-L, L, -L * h/w, L * h/w); else glOrtho2D(-L * w/h, L * w/h, -L, L); if (w <= h) glOrtho2D(-1, 1, -1 * h/w, 1 * h/w); else glOrtho2D(-1 * w/h, 1 * w/h, -1, L);
34
The Startegy
35
~ A possible solution is to change the world window whenever the viewport of the interface window were changed. ~ So, the callback Glvoid reshape(GLsizei w, GLsizei h) must include the following code :
36
void reshape(GLsizei width, GLsizei height) { if (height == 0) height = 1; GLfloat aspect = (GLfloat)width/(GLfloat)height; glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if (width >= height) { gluOrtho2D(-1.0 * aspect, 1.0 * aspect, -1.0, 1.0); } else { gluOrtho2D(-1.0, 1.0, -1.0 / aspect, 1.0 / aspect); }
37
/* Handler for window re-size event. Called back when the window first appears and whenever the window is re-sized with its new width and height */ void reshape(GLsizei width, GLsizei height) { // GLsizei for non-negative integer // Compute aspect ratio of the new window if (height == 0) height = 1; // To prevent divide by 0 GLfloat aspect = (GLfloat)width / (GLfloat)height; // Set the viewport to cover the new window glViewport(0, 0, width, height); // Set the aspect ratio of the clipping area to match the viewport glMatrixMode(GL_PROJECTION); glLoadIdentity(); // Reset the projection matrix if (width >= height) { // aspect >= 1, set the height from -1 to 1, with larger width gluOrtho2D(-1.0 * aspect, 1.0 * aspect, -1.0, 1.0); } else { // aspect < 1, set the width to -1 to 1, with larger height gluOrtho2D(-1.0, 1.0, -1.0 / aspect, 1.0 / aspect); }
38
2 D TRANSFORMATION
39
Transformation Is The geometrical changes of an object from a current state to modified state.
40
Why Needed? To manipulate the initially created object and to display the modified object without having to redraw it
41
Transformation Pipeline Vertex Modelview Matrix Modelview Matrix Projection Matrix Projection Matrix Perspective Division Perspective Division Viewport Transformation Viewport Transformation Object Coordinates Object Coordinates Eye Coordinates Eye Coordinates Clip Coordinates Clip Coordinates Normalized device Coordinates Normalized device Coordinates Window Coordinates Window Coordinates GL_MODELVIEW mode glTranslate() glRotate() glScale() glLoadMatrix() glMultMatrix() gluLookAt() GL_PROJECTION mode glOrtho() gluOrtho2D() glFrustum() gluPerspective() glViewport()
42
Types of Transformation ~ Modeling. In 3D graphics, handles moving objects around the scene. ~ Viewing. In 3D graphics, specifies the location of the camera.
43
Types of Transformation ~ Projection. Defines the viewing volume and clipping planes from eye coordinate to clip coordinates.
44
Types of Transformation ~ Viewport. Maps the projection of the scene into the rendering window. ~ Modelview. Combination of the viewing and modeling transformations.
45
Transformation Matrix Transformations in OpenGL using matrix concept
46
Matrix Modes ~ ModelView Matrix (GL_MODELVIEW) These concern model-related operations such as translation, rotation, and scaling, as well as viewing transformations.
47
Matrix Modes ~ Projection Matrix (GL_PROJECTION) Setup camera projection and cliiping-area
48
Transformation Pipeline Vertex Modelview Matrix Modelview Matrix Projection Matrix Projection Matrix Perspective Division Perspective Division Viewport Transformation Viewport Transformation Object Coordinates Object Coordinates Eye Coordinates Eye Coordinates Clip Coordinates Clip Coordinates Normalized device Coordinates Normalized device Coordinates Window Coordinates Window Coordinates GL_MODELVIEW mode glTranslate() glRotate() glScale() glLoadMatrix() glMultMatrix() gluLookAt() GL_PROJECTION mode glOrtho() gluOrtho2D() glFrustum() gluPerspective() glViewport()
49
Why do we use matrix? ~ More convenient organization of data. ~ More efficient processing ~ Enable the combination of various concatenations
50
THE MATRIX
51
Matrix addition and subtraction a b c d a c b d =
52
Matrix addition and subtraction 1 -3 5 6 + =
53
Matrix addition and subtraction 1 -3 5 6 + = 6 3
54
Matrix addition and subtraction 1 -3 + = 3 1 -1 4
55
Matrix addition and subtraction 1 -3 + = 3 1 -1 4 Tak boleh
56
Matrix Multiplication abcdabcd efghefgh. = a.e + b.g a.f + b.h c.e + d.g c.f + d.h
57
Matrix Multiplication abab efghefgh. = a.e + b.g a.f + b.h
58
Matrix Multiplication 1212 12311231. =
59
1212 12311231. = 6
60
1212 12311231. =
61
1212 12311231. = Tak boleh
62
Matrix Types efef efef Row VectorColumn Vector
63
Matrix Multiplication abcdabcd efef. = efef abcdabcd. = efef acbdacbd. =
64
abcdabcd efef. = a.e + b.f c.e + d.f efef abcdabcd. = a.e + c.f b.e + d.f efef acbdacbd. = a.e + b.f c.e + d.f
65
Matrix Math We’ll use the column-vector representation for a point.
66
Matrix Math Which implies that we use pre- multiplication of the transformation – it appears before the point to be transformed in the equation.
67
THE TRANSFORMATION
68
Translation A translation moves all points in an object along the same straight-line path to new positions.
69
Translation The path is represented by a vector, called the translation or shift vector. x’ y’ xyxy txtytxty = + New Position Current Position Translation Vector P' = P + T
70
Translation x’ y’ xyxy txtytxty = + (2, 2) t x = 6 t y =4 ? x’ y’ 2222 6464 = +
71
Translation x’ y’ xyxy txtytxty = + (2, 2) t x = 6 t y =4 ? 8686 2222 6464 = +
72
Rotation A rotation repositions all points in an object along a circular path in the plane centered at the pivot point.
73
Rotation P P’ p ' x = p x cos – p y sin p ' x = p x cos – p y sin p ' y = p x sin + p y cos p ' y = p x sin + p y cos
74
Rotation The transformation using Rotation Matrix New Position Rotation Matrix Current Position P' = R. P
75
Rotation The transformation using Rotation Matrix New Position Rotation Matrix Current Position P' = R. P
76
Rotation Find the transformed point, P’, caused by rotating P= ( 5, 1 ) about the origin through an angle of 90 .
77
Rotation
78
Scaling Scaling changes the size of an object and involves two scale factors, Sx and Sy for the x- and y- coordinates respectively.
79
Scaling Scales are about the origin. P P’ p' x = s x p x p' y = s y p y
80
Scaling The transformation using Scale Matrix New Position Scale Matrix Current Position P' = S P
81
Scaling The transformation using Scale Matrix New Position Scale Matrix Current Position P' = S P
82
Scaling If the scale factors are in between 0 and 1 the points will be moved closer to the origin the object will be smaller.
83
Scaling P(2, 5), Sx = 0.5, Sy = 0.5 Find P’ ? p' x = s x p x p' y = s y p y P(2, 5) P’
84
Scaling If the scale factors are larger than 1 the points will be moved away from the origin the object will be larger.
85
Scaling P(2, 5), Sx = 2, Sy = 2 Find P’ ? p' x = s x p x p' y = s y p y P(2, 5) P’
86
Scaling If the scale factors are not the same, Sx Sy differential scaling Change in size and shape
87
Scaling If the scale factors are the same, Sx = Sy uniform scaling
88
Scaling P(1, 3), Sx = 2, Sy = 5 square rectangle p' x = s x p x p' y = s y p y P(1, 2) P’
89
Scaling What does scaling by 1 do? Sx=1, Sy=1
90
Scaling What does scaling by 1 do? Sx=1, Sy=1 Nothing changed What is that matrix called?
91
Scaling What does scaling by 1 do? Sx=1, Sy=1 Nothing changed What is that matrix called? Identity Matrix
92
Scaling What does scaling by a negative value do? Sx=-2, Sy=-2
93
Scaling What does scaling by a negative value do? Sx=-2, Sy=-2 Moved to Different Quadran
94
COMBINING TRANSFORMATIONS
95
Combining Transf For example, we want to rotate/scale then we want to do translation P' = M P + A
96
Combining Transf For example, we want to translate, then we want to rotate and sclae P' = S R (A + P)
97
Combining Transf P (Px,Py)=( 4, 6 ) : Translate( 6, -3 ) - > Rotation( 60˚ ) -> Scaling ( 0.5, 2.0 ) P' = S R (A + P)
98
Combining Transf
99
To combine multiple transformations, we must explicitly compute each transformed point. P' = S R (A + P)
100
Combining Transf It’d be nicer if we could use the same matrix operation all the time. But we’d have to combine multiplication and addition into a single operation. P' = S R (A + P)
101
Combining Transf Let’s move our problem into one dimension higher
102
HOMOGENOUS COORDINATES
103
Homogenous Coord Let point (x, y) in 2D be represented by point (x, y, 1) in the new space. yy x x w
104
Homogenous Coord ~ Scaling our new point by any value a puts us somewhere along a particular line: (ax, ay, a). ~ A point in 2D can be represented in many ways in the new space. ~ (2, 4) ----------- > (2, 4, 1) or (8, 16, 4) or (6, 12, 3) or (2, 4, 1) or etc.
105
Homogenous Coord We can always map back to the original 2D point by dividing by the last coordinate (15, 6, 3) (5, 2). (60, 40, 10) ?.
106
Homogenous Coord The fact that all the points along each line can be mapped back to the same point in 2D gives this coordinate system its name – homogeneous coordinates.
107
Homogenous Coord With homogeneous coordinates, we can combine multiplication and addition into a single operation.
108
Homogenous Coord Point in column-vector: Our point now has three coordinates. So our matrix is needs to be 3x3.
109
Homogenous Coord Translation: x’ y’ xyxy txtytxty = +
110
Homogenous Coord Rotation:
111
Homogenous Coord Scaling:
112
Homogenous Coord P (Px,Py)=( 4, 6 ) : Translate( 6, -3 ) - > Rotation( 60˚ ) -> Scaling ( 0.5, 2.0 )
113
Homogenous Coord We can represent any sequence of transformations as a single matrix
114
Homogenous Coord Does the order of operations matter?
115
Homogenous Coord Yes, the order does matter! 1.Translate 2.Rotate 1.Rotate 2.Translate
116
Homogenous Coord Yes, the order does matter! A. B = B. A?
117
Homogenous Coord Yes, the order does matter! A. B B. A
118
Homogenous Coord Yes, the order does matter! (A.B).C = A.(B.C)?
119
Homogenous Coord Yes, the order does matter! (A.B).C = A.(B.C) dhlcfldgjcejdhkcfkdgicei bhlaflbgjaejbhkafkbgiaei lk ji dhcfdgce bhafbgae lk ji hg fe dc ba dhldgjcflcejdhkdgicfkcei bhlbgjaflaejbhkbgiafkaei hlgjhkgi flejfkei dc ba lk ji hg fe dc ba
120
Composite Transformation Matrix Arrange the transformation matrices in order from right to left. General Pivot- Point Rotation Operation :- 1.Translate (pivot point is moved to origin) 2.Rotate about origin 3.Translate (pivot point is returned to original position ) T(pivot) R( ) T(–pivot)
121
1 0 -t x 0 1 -t y 0 0 1 cos -sin 0 sin cos 0 0 0 1 1 0 t x 0 1 t y 0 0 1.. cos -sin -t x cos + t y sin + t x sin cos -t x sin - t y cos + t y 0 0 1 cos -sin -t x cos + t y sin sin cos -t x sin - t y cos 0 0 1 1 0 t x 0 1 t y 0 0 1. Composite Transformation Matrix
122
Reflection: x-axisy-axis Other Transf
123
Reflection: origin line x=y Other Transf
124
Shearing-x Shearing-y SebelumSesudah SebelumSesudah Shearing
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.