3D VIEWING
CA 302 Computer Graphics and Visual Programming
Aydın Öztürk
[email protected]://www.ube.ege.edu.tr/~ozturk
Overview
Viewing a 3D sceneProjections
Parallel and perspective
Overview
Depth cueing and hidden surfaces
Identifying visible lines and surfaces
Overview
Surface rendering
Overview
Exploded and cutaway views
Overview
3D and stereoscopic viewing
3D Viewing Pipeline
ModelingTransformation
ViewingTransformation
ProjectionTransformation
Normalization
Transformation
and Clipping
ViewportTransformation
MC
WC
VC PC
NC
DC
Viewing Coordinates
Generating a view of an object in 3D is similar to photographing the object.
Whatever appears in the viewfinder is projected onto the flat film surface.
Depending on the position, orientation and aperture size of the camera corresponding views of the scene is obtained.
Specifying The View Coordinates
For a particular view of a scene first we establish viewing-coordinate system.
A view-plane (or projection plane) is set up perpendicular to the viewing z-axis.
World coordinates are transformed to viewing coordinates, then viewing coordinates are projected onto the view plane.
xw
zw
yw
xv
zv
yv
P0=(x0 , y0 , z0)
Specifying The View Coordinates
To establish the viewing reference frame, we first pick a world coordinate position P0=(x0 , y0 , z0) calle the view point or viewing position (sometimes the eye position or the camera position.This point is the origin of our viewing coordinate
system. If we choose a point on an object we can
think of this point as the position where we aim a
camera to take a picture of the object.
Specifying The View Coordinates
Next, we select the positive direction for the viewing z-axis, and the orientation of the view plane, by specifying the view-plane normal vector, N.
xw
zw
yw
xv
zv
P0
P
N
xv
yv
Specifying The View Coordinates
We choose a world coordinate position P on an object (we can
think of this point as the position where we aim a camera to take a picture of the object and this point establishes the direction for N.
xw
zw
yw
xv
zv
P0
P
N
xv
yv
Specifying The View Coordinates
OpenGL establishes the direction for N using the point P as a look at point relative to the viewing coordinate origin
xw
zw
yw
xv
zv
P0
P
N
xv
yv
Specifying The View Coordinates
Finally, we choose the up direction for the view by specifying view-up vector V.
This vector is used to establish the positive direction for the yv axis.
The vector V is perpendicular to N and is defined by selecting a positon relative to the world coordinate origin.
xw
zw
yw
xv
zv
yv
P0
P
N
V
Specifying The View Coordinates
Using N and V, we can compute a third vector U, perpendicular to both N and V, to define the direction for the xv axis.
xw
zw
yw
xv
zv
yv
P0
P
N
V
Specifying The View Coordinates
Usually, it can be difficult to determine a direction for V that is precisely prependicular to N.
Therefore, the user defined orientation of V is projected onto a plane that is prependicular to N.
Any direction for the view-up vector V can be chosen. A convenient choice is often in a direction parallel to the world yw axis that is V=(0,1,0)
xw
zw
yw
xv
zv
yv
P0
P
N
V
Specifying The View Coordinates
To obtain a series of views of a scene , we can keep the the view reference point fixed and change the direcion of N. This corresponds to generating views as we move around the viewing coordinate origin.
P0
V
N
N
Transformation From World To Viewing Coordinates
Conversion of object descriptions from world to viewing coordinates is equivalent to transformation that superimpoes the viewing reference frame onto the world frame using the translation and rotation.
xw
yw
zw
xv
yv
zv
Transformation From World To Viewing Coordinates
First, we translate the view reference point to the origin of the world coordinate system
xw
yw
zw
xv
yv
zv
Transformation From World To Viewing Coordinates
Second, we apply rotations to align the xv,, yv and zv axes with the world xw, yw and zw axes, respectively.
xw
yw
zw
xv
yv
zv
yv xv
zv
Transformation From World To Viewing Coordinates
If the view reference point is specified at word position (x0, y0, z0), this point is translated to the world origin with the translation matrix T.
1000
100
010
001
0
0
0
z
y
x
T
Transformation From World To Viewing Coordinates
The rotation sequence requires 3 coordinate-axis transformation depending on the direction of N.
First we rotate around xw-axis to bring zv into the xw -zw plane.
1000
00
00
0001
CosSin
SinCosxR
Transformation From World To Viewing Coordinates
Then, we rotate around the world yw axis to align the zw and zv axes.
1000
00
0010
00
CosSin
SinCos
yR
Transformation From World To Viewing Coordinates
The final rotation is about the world zw axis to align the yw and yv axes.
1000
0100
00
00
CosSin
SinCos
zR
Transformation From World To Viewing Coordinates
The complete transformation from world to viewing coordinate transformation matrix is obtaine as the matrix product
TRRRM xyzvcwc ,
Another method for generating the rotation-transformation matrix is to calculate uvn vectors and obtain the composite rotation matrix directly. Given the vectors N and V , these unit vectors are calculated as
),,(
),,(
),,(
321
321
321
vvv
uuu
nnn
unv
NVNV
u
NN
n
Transformation From World To Viewing Coordinates
Transformation From World To Viewing Coordinates
This method also automatically adjusts the direction for V so that v is perpendicular to n. The rotation matrix for the viewing transformation is then
10 0 0
0
0
0
321
321
321
nnn
vvv
uuu
R
Transformation From World To Viewing Coordinates
The matrix for translating the viewing origin to the world origin is
1 0 0
100
0 10
0 01
0
0
0
z
y
x
R
Transformation From World To Viewing Coordinates
The composite matrix for the viewing transformation is then
zyx
zyx
zyx
VCWC
nznynxt
vzvyvxt
uzuyuxt
tnnn
tvvv
tuuu
00003
00002
00001
3321
2321
1321
,
where
10 0 0
Pn
Pv
Pu
M
Transformation From World To Viewing Coordinates: An Example For 2D System
y
x
x′
y′
Θ=300
0 2 4 6 0
2
4
6
22
P=(5,5)
P0=(4,3)
y
x
x′y′
Θ=300
2 4 6
0
2
4
6
2 2
P
P0
Translation:
100
310
401
T
Transformation From World To Viewing Coordinates: An Example For 2d System
Rotation
0
2
4
6
y
xx′
y′
2 4 6
P
P0
100
0866.05.0
05.0866.0
R
Transformation From World To Viewing Coordinates: An Example For 2d System
New coordinates
100
310
401
100
0866.05.0
05.0866.0
.vcwcM
1
232.1
866.1
1
5
5
100
598.0866.0500.0
964.4500.0866.0
1
'
'
y
x
Transformation From World To Viewing Coordinates: An Example For 2d System
Alternative Method
xTRx
R
v
n
'
100
0866.0500.0
0500.0866.0
)866.0500.0(
)500.0866.0( y
x
x′y′
Θ=3000
1
2
3
1
1P
P0 1 2 3
nv
Transformation From World To Viewing Coordinates: An Example For 2d System
Projections
Once WC description of the objects in a scene are converted to VC we can project the 3D objects onto 2D view-plane.
Two types of projections:
-Parallel Projection
-Perspective Projection
Classical Viewings
Hand drawings : Determined by a specific relationship between the object and the viewer.
Parallel Projections
Coordinate Positions are transformed to the view plane along parallel lines.
P1
P2P′2
P′1
View Plane
Parallel Projections
Orthographic parallel projection: The projection is perpendicular to the view plane.
Oblique parallel projecion: The parallel projection is not perpendicular to the view plane.
Orthographic Parallel Projection
The orthographic transformation
11000
0000
0010
0001
1
'
'
'
z
y
x
z
y
x
Orthographic Parallel Projection
Oblique Parallel Projection
The projectors are still ortogonal to the projection plane But the projection plane can have any orientation with respect to the
object. It is used extensively in architectural and mechanical design.
•Oblique Parallel Projection
• Preserve parallel lines but not angles• Isometric view : Projection plane is placed symmetrically
with respect to the three principal faces that meet at a corner of object.
• Dimetric view : Symmetric with two faces.• Trimetric view : General case.
Oblique Parallel Projection
Preserve parallel lines but not angles Isometric view : Projection plane is placed symmetrically with
respect to the three principal faces that meet at a corner of object. Dimetric view : Symmetric with two faces. Trimetric view : General case.
Oblique Parallel Projection
φ
α
(xp, yp)
(x, y, z)
(x, y)
yv
xv
zv
L
)sin(
)cos(
tan
sin
cos
1
1
1
Lzyy
Lzxx
zLz
L
Lyy
Lxx
p
p
p
p
)sin(
)cos(
tan
sin
cos
1
1
1
Lzyy
Lzxx
zLz
L
Lyy
Lxx
p
p
p
p
The oblique transformation
11000
0000
0sin10
0cos01
1
1
1
z
y
x
L
L
z
y
x
p
p
p
Oblique Parallel Projection
Oblique Parallel Projection
Perspective Projections
First discovered by Donatello, Brunelleschi, and DaVinci during Renaissance
Objects closer to viewer look largerParallel lines appear to converge to single point
Perspective Projections
In perspective projection object positions are transformed to the view plane along lines that converge to a point called the projection reference point (or center of projection)
Perspective Projections
In the real world, objects exhibit perspective foreshortening: distant objects appear smaller
The basic situation:
When we do 3-D graphics, we think of the screen as a 2-D window onto the 3-D world:
How tall shouldthis bunny be?
Perspective Projections
The geometry of the situation is that of similar triangles. View from above:
d
P (x, y, z) X
Z(0,0,0)x′ = ?
Perspective Projections
View plane
(xp, yp)
Desired result for a point [x, y, z, 1]T projected onto the view plane:
dzdz
y
z
ydy
dz
x
z
xdx
z
y
d
y
z
x
d
x
',','
',
'
Perspective Projections
1100
0100
0010
0001
d
eperspectivM
Perspective Projections
hyyhxx
dzh
z
y
x
dh
z
y
x
hphp
h
h
h
/,/
/
10100
0100
0010
0001
Perspective Projections
Projection Matrix
We talked about geometric transforms, focusing on modeling transforms Ex: translation, rotation, scale, gluLookAt() These are encapsulated in the OpenGL modelview matrix
Can also express projection as a matrix These are encapsulated in the OpenGL projection matrix
When a camera used to take a picture, the type of lens used determines how much of the scene is caught on the film.
In 3D viewing, a rectangular view window in the view plane is used to the same effect. Edges of the view window are parallel to the xv-yv axes and window boundary positions are specified in viewing coordinates.
View Volumes
View Volumes
zvwindow
Front Plane
Back Plane
View volume
Parallel ProjectionParallel Projection Perspective Projection
Front Plane
Back Plane
View volume (frustum)
window
Projection Reference Point
Clipping
An algorithm for 3D clipping identifies and saves all surface segments within the view volume for display.
All parts of object that are outside the view volume are discarded.
Clipping Lines
To clip a line against the view volume, we need to test the relative position of the line using the view volume’s boundary plane equation.
An end point (x,y,z) of a line segment is outside a boundary plane if
where A, B, C and D are the plane parameters for that boundary.
0 DCzByAx
Clipping Polygon Surface
To clip a polygon surface, we can clip the individual polygon edges.
First we test the coordinate extends against each boundary of the view volume to determine whether the object is completely inside or completely outside of that boundary.
If the object has intersection with the boundary then we apply intersection calculations.
Clipping Polygon Surface
The projection operation can take place before the view- volume clipping or after clipping.
All objects within the view volume map to the interior of the specified projection window.
The last step is to transform the window contents to a 2D view port.
Clipping Polygon Surface
Viev volume
Steps For Normalized View Volumes
A scene is constructed by transforming object descriptions from modeling coordinates to wc.
The world descriptions are converted to viewing coordinates.The viewing coordinates are transformed to projection
coordinates which effectively converts the view volume into a rectangular parallelepiped.
The parallelepiped is mapped into the unit cube called normalized projection coordinate system.
A 3D viewport within the unit cube is constructed.Normalized projection coordinates are converted to device
coordinates for display.
Normalized View Volumes
(Xvmax,Yvmax, Zvmax)
x
y
z
(Xwmin, Ywmin, Zfront)
(Xwmax,Ywmax, Zback)
(Xvmin, Yvmin, Zwmin)
Unit Cube
Parallelepiped
View Volume
OpenGL Projection Commands
OpenGL Look-At Function
OpenGL utility function
VRP: eyePoint (eyex, eyey, eyez) VPN: ( atPoint – eyePoint ) =(atx, aty, atz) – (eyex, eyey, eyez) VUP: (upPoint – eyePoint) =(upx, upy, upz)
gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);
look-at positioning
Projections in OpenGL
Angle of view, field of view : Only objects that fit within
the angle of view of the camera appear in the image
View volume, view frustum : Be clipped out of scene Frustum – truncated
pyramid
Projections in OpenGL
Perspective in OpenGL
Specification of a frustum
near, far: positive number !!
zmax = – far
zmin = – near
glMatrixMode(GL_PROJECTION);glLoadIdentity( );glFrustum(xmin, xmax, ymin, ymax, near, far);
Perspective in OpenGL
Specification using the field of view
fov: angle between top and
bottom planes fovy: the angle of view in the
up (y) direction aspect ratio: width / height
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );gluPerspective(fovy, aspect, near, far);
Parallel Viewing in OpenGL
Orthographic viewing function
OpenGL provides only this parallel-viewing function
near < far !!
no restriction on the sign
zmax = – far
zmin = – near
glMatrixMode(GL_PROJECTION);glLoadIdentity( );glOrtho(xmin, xmax, ymin, ymax, near, far);