Perspective View
Download
Report
Transcript Perspective View
Graphics
Viewing
고려대학교 컴퓨터 그래픽스 연구실
kucg.korea.ac.kr
Graphics Lab @ Korea University
Fundamental Types of
Viewing
Perspective views
KUCG
finite COP (center of projection)
Parallel views
COP at infinity
DOP (direction of projection)
perspective view
kucg.korea.ac.kr
parallel view
Graphics Lab @ Korea University
Parallel View
kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Perspective View
kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Classical Viewing
KUCG
Specific relationship between the objects and
the viewers
kucg.korea.ac.kr
Graphics Lab @ Korea University
Orthographic Projections
KUCG
Projectors are perpendicular to the projection
plane
preserve both distances and angles
orthographic projections
kucg.korea.ac.kr
temple and three multiview
orthographic projections
Graphics Lab @ Korea University
Axonometric Projections (1/2)
KUCG
Projection plane can have any orientation with
respect to the object
projectors are still orthogonal to the projection planes
construction
kucg.korea.ac.kr
top view
side view
Graphics Lab @ Korea University
Axonometric Projections (2/2)
KUCG
Preserve parallel lines but not angles
isometric – projection plane is placed symmetrically
with respect to the three principal faces
dimetric – two of principal faces
trimetric – general case
kucg.korea.ac.kr
Graphics Lab @ Korea University
Axonometric Projections (2/2)
KUCG
Preserve parallel lines but not angles
isometric – projection plane is placed symmetrically
with respect to the three principal faces
dimetric – two of principal faces
trimetric – general case
kucg.korea.ac.kr
Graphics Lab @ Korea University
Oblique Projections
KUCG
Projectors can make an arbitrary angle with the
projection plane
preserve angels in planes parallel to the projection
plane
construction
kucg.korea.ac.kr
top view
side view
Graphics Lab @ Korea University
Perspective Projections (1/2)
KUCG
Diminution of size
when objects are moved father from the viewer, their
images become smaller
kucg.korea.ac.kr
Graphics Lab @ Korea University
Perspective Projections (2/2)
KUCG
One-, two-, and three-point perspectives
how many of the three principal directions in the
object are parallel to the projection plane
vanishing points
three-point
perspective
kucg.korea.ac.kr
two-point
perspective
one-point
perspective
Graphics Lab @ Korea University
Perspective Projections (2/2)
KUCG
One-, two-, and three-point perspectives
how many of the three principal directions in the
object are parallel to the projection plane
vanishing points
three-point
perspective
kucg.korea.ac.kr
two-point
perspective
one-point
perspective
Graphics Lab @ Korea University
Perspective Projections (2/2)
KUCG
One-, two-, and three-point perspectives
how many of the three principal directions in the
object are parallel to the projection plane
vanishing points
three-point
perspective
kucg.korea.ac.kr
two-point
perspective
one-point
perspective
Graphics Lab @ Korea University
Perspective Projections (2/2)
KUCG
One-, two-, and three-point perspectives
how many of the three principal directions in the
object are parallel to the projection plane
vanishing points
three-point
perspective
kucg.korea.ac.kr
two-point
perspective
one-point
perspective
Graphics Lab @ Korea University
Positioning of the Camera (1/3)
KUCG
OpenGL places a camera at the origin of the
world frame pointing in the negative z direction
move the camera away from the objects
glTranslatef(0.0, 0.0, -d);
initial configuration
kucg.korea.ac.kr
after change in the model-view matrix
Graphics Lab @ Korea University
Positioning of the Camera (2/3)
KUCG
Look at the same object from the positive x axis
translation after rotation by 90 degrees about the y
axis
glMatrixMode(GL_MODELVIEW);
glLoadIdentity( );
glTranslatef(0.0, 0.0, -d);
glRotatef(-90.0, 0.0, 1.0, 0.0);
kucg.korea.ac.kr
Graphics Lab @ Korea University
Positioning of the Camera (3/3)
KUCG
Create an isometric view of the cube
1
0
M TR x R y
0
0
y
(1, 1, 1)
0 1
1 0 0 0
0 1 d 0
0 0 1 0
0 0
(0, 1,
0
6 / 3 3 / 3 0
3 /3
6 / 3 0
0
0
1
0
0
y
(0, 1,
2)
2 /2
0
0
1
2 /2 0
0
0
y
2 / 2 0
0
0
2 / 2 0
0
1
2)
z
x
view from
positive z axis
kucg.korea.ac.kr
x
view from
positive z axis
view from
positive x axis
Graphics Lab @ Korea University
Positioning of the Camera (3/3)
KUCG
Create an isometric view of the cube
glMatrixMode(GL_MODELVIEW);
glLoadIdentity( );
glTranslatef(0.0, 0.0, -d);
glRotatef(35.26, 1.0, 0.0, 0.0);
glRotatef(45.0, 0.0, 1.0, 0.0);
y
(1, 1, 1)
y
(0, 1,
y
2)
(0, 0,
x
view from
positive z axis
kucg.korea.ac.kr
x
3)
x
view from
positive z axis
Graphics Lab @ Korea University
U-V-N System (1/2)
KUCG
VRP (view-reference point), VPN (view-plane
normal), and VUP (view-up vector)
u, v (up-direction vector), n (normal vector)
x, y, z axes respectively
camera frame
kucg.korea.ac.kr
determination of the view-up vector
Graphics Lab @ Korea University
U-V-N System (2/2)
KUCG
Translation after rotation
VRP – (x, y, z) T(-x, -y, -z)
VNP – (nx, ny, nz) n
VUP – vup v = vup – (vup• n) n
u=vn
(※ our assumption – all vectors must be normalized )
1
0
M TR
0
0
kucg.korea.ac.kr
0 0 x u x
1 0 y v x
0 1 z n x
0 0 1 0
uy
uz
vy
ny
vz
nz
0
0
0
0
0
1
Graphics Lab @ Korea University
Look-At Function
KUCG
OpenGL utility function
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);
VRP: eyePoint
VPN: – ( atPoint – eyePoint )
VUP: upPoint – eyePoint
look-at positioning
kucg.korea.ac.kr
Graphics Lab @ Korea University
Others
Roll, pitch, and yaw
KUCG
ex. flight simulation
Elevation and azimuth
ex. star in the sky
kucg.korea.ac.kr
Graphics Lab @ Korea University
Simple Perspective
Projections (1/2)
KUCG
Simple camera
projection plane is orthogonal to z axis
projection plane in front of COP
zp d,
x
xp
,
z/d
three-dimensional view
kucg.korea.ac.kr
x xp
z d
y
yp
z/d
top view
side view
Graphics Lab @ Korea University
Simple Perspective
Projections (2/2)
Homogeneous coordinates
x wx
y wy
p
z wz
1 w
KUCG
x x
z/d x
xp
y z /yd y y
p
p
z/d
zp z / d
z
z
d
1
z
/
d
z/d
1
1
Perspective projection matrix
1
0
M
0
0
0
0
1
0
0
1
0 1/ d
kucg.korea.ac.kr
0
0
0
0
Model-view
Projection
Perspective
division
projection pipeline
Graphics Lab @ Korea University
Simple Orthogonal Projections
KUCG
Projectors are perpendicular to the view plane
xp x
yp y
zp 0
Orthographic projection matrix
x p 1
y 0
p
z p 0
1 0
kucg.korea.ac.kr
0 0 0 x
1 0 0 y
0 0 0 z
0 0 1 1
Graphics Lab @ Korea University
Projections in OpenGL
Angle of view
KUCG
only objects that fit within the
angle of view of the camera
appear in the image
View volume
be clipped out of scene
frustum – truncated pyramid
kucg.korea.ac.kr
Graphics Lab @ Korea University
Perspective in OpenGL (1/2)
KUCG
Specification of a frustum
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
glFrustum(xmin, xmax, ymin, ymax, near, far);
near, far: positive number !!
zmax = – far
zmin = – near
kucg.korea.ac.kr
Graphics Lab @ Korea University
Perspective in OpenGL (2/2)
KUCG
Specification using the field of view
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
gluPerspective(fovy, aspect, near, far);
fov: angle between top and
bottom planes
fovy: the angle of view in the
up (y) direction
aspect ratio: width divided
by height
kucg.korea.ac.kr
Graphics Lab @ Korea University
Parallel in OpenGL
KUCG
Orthographic viewing function
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
glOrtho(xmin, xmax, ymin, ymax, near, far);
OpenGL provides only this parallel-viewing function
near < far !!
no restriction on the sign
zmax = – far
zmin = – near
kucg.korea.ac.kr
Graphics Lab @ Korea University
Walking Though a Scene (1/2)
void keys(unsigned
{
if(key == ‘x’)
if(key == ‘X’)
if(key == ‘y’)
if(key == ‘Y’)
if(key == ‘z’)
if(key == ‘Z’)
}
KUCG
char key, int x, int y)
viewer[0]
viewer[0]
viewer[1]
viewer[1]
viewer[2]
viewer[2]
-=
+=
-=
+=
-=
+=
1.0;
1.0;
1.0;
1.0;
1.0;
1.0;
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(viewer[0], viewer[1], viewer[2], 0,0,0, 0,1,0);
glRotatef(theta[0], 1.0, 0.0, 0.0);
glRotatef(theta[1], 0.0, 1.0, 0.0);
glRotatef(theta[2], 0.0, 0.0, 1.0);
colorcube( );
}
glFlush( );
glutSwapBuffers( );
kucg.korea.ac.kr
Graphics Lab @ Korea University
Walking Though a Scene (2/2)
KUCG
void myReshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
if( w <= h )
glFrustum(-2.0, 2.0, -2.0*(GLfloat)h/(GLfloat)w,
2.0*(GLfloat)h/(GLfloat)w, 2.0, 20.0);
else
glFrustum(-2.0 *(GLfloat)w/(GLfloat)h,
2.0 *(GLfloat)w/(GLfloat)h, -2.0, 2.0, 2.0, 20.0);
glMatrixMode(GL_MODELVIEW);
}
kucg.korea.ac.kr
Graphics Lab @ Korea University
Projections & Shadows (1/2)
KUCG
Shadow polygon
Steps
light source at (xl, yl, zl)
translation (-xl, -yl, -zl)
perspective projection
through the origin
translation (xl, yl, zl)
1
0
M T 1 PT
0
0
kucg.korea.ac.kr
0
1
0
0
0
0
1
0
0
xl 1
1
yl 0
0
z l 0
1 0 1 / y l
0
0
1
0
0 1
0 0
0 0
0 0
0
1
0
0
0 xl
0 yl
1 zl
0 1
Graphics Lab @ Korea University
Projections & Shadows (2/2)
KUCG
GLfloat m[16];
/* shadow projection matrix */
for(i=0; i<16; i++) m[i] = 0.0;
m[0] = m[5] = m[10] = 1.0;
m[7] = -1.0/yl;
glColor3fv(polygon_color);
glBegin(GL_POLYGON);
.
.
.
glEnd( );
glMatrixMode(GL_MODELVIEW);
glPushMatrix( );
glTranslatef(xl, yl, zl);
glMultMatrixf(m);
glTranslatef(-xl, -yl, -zl);
glColorfv(shadow_color);
glBegin(GL_POLYGON);
.
.
.
glEnd( );
glPopMatrix( );
kucg.korea.ac.kr
/* draw the polygon normally */
/*
/*
/*
/*
save state */
translate back */
project */
move light to origin */
/* draw the polygon again */
/* restore state */
Graphics Lab @ Korea University
Shadows from a Cube onto
Ground
kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University