GRAFIKA
KOMPUTER
Drawing
VIEWPORT
Recall :Coordinate
System
glutReshapeFunc(reshape);
void reshape(int w, int h) {
glViewport(0,0,(GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION);
glLoadIdentity();
World Coordinate System
0
0 1 2
-2 -1
1 2
World Coordinate System
~ The representation of an
object is
measured
in some
physical or abstract
units
.
~
Space in which the
object
World Window
0 1 2
-2 -1
1 2
World Window
0 1 2
-2 -1
1 2
World Window
~
Rectangle
defining the part
of the world we wish to
display
.
~ Area that
can be seen
(what
is
captured
by the camera),
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);
The Default
The
default
OpenGL 2D
clipping-area is an
orthographic view with x
and y in the range of
-1.0
World Window
~ Reset to the default
void reshape(int w, int h) {
glViewport(0,0,(GLsizei) w, (GLsizei) h);
glMatrixMode(GL_PROJECTION); glLoadIdentity();
Viewport
Screen
Screen window
Interface Window
Screen Coordinate System
~ Space in which the image is
displayed
Interface Window
~ Visual representation of the
screen coordinate system for
windowed displays
Vewport
~ A rectangle on the interface
window defining
where the
image will appear
,
~ The default is
the entire
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();
Interface Window
~ Set the viewport to half of
the screen / window
glutInitWindowSize(320, 320); glutInitWindowPosition(50, 50);
Viewport
Screen
Screen window
Interface Window
Viewport Transformation
The distortion
Screen
Screen window
Interface Window
The distortion
Screen
Screen window
Interface Window
Ratio
Keeping the Ratio
Screen
Screen window
Interface Window
Keeping the Ratio
Screen
Screen window
Interface Window
The Startegy
~ To avoid distortion, we must
change the size of the world
window accordingly.
The Startegy
~ Default
glOrtho2D (-L, L, -L, L);
~
For example L=1,
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
The Startegy
~ 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)
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);
/* 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); }
2
D
Transformation
Why Needed?
Transformation Pipeline
Vertex Modelview Matrix
GL_MODELVIEW mode
glTranslate()
GL_PROJECTION mode
glOrtho() gluOrtho2D() glFrustum()
gluPerspective()
Types of Transformation
~ Modeling.
In 3D graphics, handles moving
objects
around the scene.
~ Viewing.
In
3D
graphics,
specifies
the
Types of Transformation
~ Projection.
Defines the
viewing volume and
clipping
planes
from
eye
Types of Transformation
~ Viewport.
Maps the
projection
of the scene
into the rendering
window.
~ Modelview.
Combination of the
viewing and
Transformation Matrix
Matrix Modes
~ ModelView Matrix
(GL_MODELVIEW)
These concern model-related
Matrix Modes
~ Projection Matrix
(GL_PROJECTION)
Transformation Pipeline
Vertex Modelview Matrix
GL_MODELVIEW mode
glTranslate()
GL_PROJECTION mode
glOrtho() gluOrtho2D() glFrustum()
gluPerspective()
Why do we use matrix?
~ More convenient
organization of data.
Matrix addition
and subtraction
a b
c d
a c
Matrix addition
and subtraction
1 -3
5 6
Matrix addition
and subtraction
1 -3
5 6
Matrix addition
and subtraction
1
-3 + =
3 1
Matrix addition
and subtraction
1
-3 + =
3 1
Matrix Multiplication
a b c d
e f g h
Matrix Multiplication
a b e f g h
Matrix Multiplication
1 2 1 2
3 1
Matrix Multiplication
1 2 1 2
3 1
Matrix Multiplication
1 2
1 2
3 1
Matrix Multiplication
1 2
1 2
3 1
Matrix Types
e f e f
Matrix Multiplication
a b c d
e f
.
=e f
.
ac bd =Matrix Multiplication
a b c d
e f
.
= a.e + b.f c.e + d.fe f
.
ac bd = a.e + c.f b.e + d.fMatrix Math
We’ll use the column-vector
Matrix Math
Which implies that we use
pre-multiplication of the transformation
– it appears before the point to be
THE
Translation
A translation moves all points in an
object along the same straight-line
Translation
The path is represented by a vector,
called the translation or shift vector.
x’
New Position Current Position Translation Vector
Rotation
A rotation repositions all points in an
object along a circular path in the
Rotation
P
P’
p'x = p
x cos – py sin
p'y = p
Rotation
The transformation using Rotation
Matrix
New Position Rotation Matrix Current Position
Rotation
The transformation using Rotation
Matrix
New Position Rotation Matrix Current Position
Rotation
Find the transformed point, P’,
caused by rotating P= (
5, 1
) about theScaling
Scaling changes the size of an object
and involves two scale factors, Sx
Scaling
Scales are about the origin.
P
P’
p'
x = sx • px
Scaling
The transformation using Scale
Matrix
New Position Scale Matrix Current Position
Scaling
The transformation using Scale
Matrix
New Position Scale Matrix Current Position
Scaling
If the scale factors are in between 0
and 1 the points will be moved
closer to the origin the object will
Scaling
P(2, 5), Sx = 0.5, Sy = 0.5
Find P’ ?
p'
x = sx • px
p'y = sy • py
P(2, 5)
Scaling
If the scale factors are larger than 1
the points will be moved away
from the origin the object will be
Scaling
P(2, 5), Sx = 2, Sy = 2
Find P’ ?
p'
x = sx • px
p'y = sy • py
P(2, 5)
Scaling
If the scale factors are not the same,
Sx Sy differential scaling
Scaling
If the scale factors are the same,
Scaling
P(1, 3), Sx = 2, Sy = 5
square rectangle
p'
x = sx • px
p'y = sy • py
P(1, 2)
Scaling
What does scaling by
1
do?Scaling
What does scaling by
1
do?Sx=1 , Sy=1 Nothing changed
Scaling
What does scaling by
1
do?Sx=1 , Sy=1 Nothing changed
What is that matrix called?
Scaling
What does scaling by a negative value do?
Scaling
What does scaling by a negative value do?
Sx=-2 , Sy=-2 Moved to Different
COMBINING
Combining Transf
For example, we want to
rotate/scale then we want to do translation
Combining Transf
For example, we want to translate, then we want to rotate and sclae
Combining Transf
P (Px,Py)=(
4 , 6
) : Translate(6 , -3
) -> Rotation(60
˚
) -> Scaling (0.5 , 2.0
)Combining Transf
To combine multiple transformations,
we must explicitly compute each
transformed point.
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.
Combining Transf
Let’s move our problem into one
Homogenous Coord
Let point (x, y) in 2D be represented by point (x, y, 1) in the new space.
y y
x
x
w
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.
Homogenous Coord
We can always map back to the
original 2D point by dividing by the last coordinate
(15, 6, 3)
(5, 2).
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 –
Homogenous Coord
With homogeneous coordinates, we can combine multiplication and
Homogenous Coord
Point in column-vector:
Our point now has three
Homogenous Coord
Translation:
x’ y’
x y
tx ty
Homogenous Coord
Homogenous Coord
Homogenous Coord
Homogenous Coord
We can represent any sequence of
Homogenous Coord
Homogenous Coord
Yes, the order does matter!
1. Translate 2. Rotate
Homogenous Coord
Yes, the order does matter!
Homogenous Coord
Yes, the order does matter!
Homogenous Coord
Yes, the order does matter!
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)
Reflection:
x-axis y-axis
Reflection:
origin line x=y
• Shearing-x
• Shearing-y
Sebelum Sesudah
Sebelum Sesudah