viewing/projections i week 3, fri jan 25

31
University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2008 Tamara Munzner http://www.ugrad.cs.ubc.ca/~cs314/ Vjan2008 Viewing/Projections I Week 3, Fri Jan 25

Upload: domani

Post on 06-Jan-2016

36 views

Category:

Documents


0 download

DESCRIPTION

http://www.ugrad.cs.ubc.ca/~cs314/Vjan2008. Viewing/Projections I Week 3, Fri Jan 25. Reading for This and Next 2 Lectures. FCG Chapter 7 Viewing FCG Section 6.3.1 Windowing Transforms RB rest of Chap Viewing RB rest of App Homogeneous Coords. Review: Display Lists. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Viewing/Projections I Week 3, Fri Jan 25

University of British ColumbiaCPSC 314 Computer Graphics

Jan-Apr 2008

Tamara Munzner

http://www.ugrad.cs.ubc.ca/~cs314/Vjan2008

Viewing/Projections I

Week 3, Fri Jan 25

Page 2: Viewing/Projections I Week 3, Fri Jan 25

2

Reading for This and Next 2 Lectures

• FCG Chapter 7 Viewing

• FCG Section 6.3.1 Windowing Transforms

• RB rest of Chap Viewing

• RB rest of App Homogeneous Coords

Page 3: Viewing/Projections I Week 3, Fri Jan 25

3

Review: Display Lists

• precompile/cache block of OpenGL code for reuse• usually more efficient than immediate mode

• exact optimizations depend on driver

• good for multiple instances of same object• but cannot change contents, not parametrizable

• good for static objects redrawn often• display lists persist across multiple frames• interactive graphics: objects redrawn every frame from new

viewpoint from moving camera

• can be nested hierarchically• snowman example: 3x performance improvement, 36K polys

Page 4: Viewing/Projections I Week 3, Fri Jan 25

4

Review: Computing Normals

• normal• direction specifying orientation of polygon

• w=0 means direction with homogeneous coords• vs. w=1 for points/vectors of object vertices

• used for lighting• must be normalized to unit length

• can compute if not supplied with object

1P

N

2P

3P)()( 1312 PPPPN −×−=

N

Page 5: Viewing/Projections I Week 3, Fri Jan 25

5

Review: Transforming Normals

• cannot transform normals using same matrix as points• nonuniform scaling would cause to be not

perpendicular to desired plane!

MPP ='PN QNN ='

given M,given M,what should Q be?what should Q be?

( )T1MQ −= inverse transpose of the modelling transformation

Page 6: Viewing/Projections I Week 3, Fri Jan 25

6

Viewing

Page 7: Viewing/Projections I Week 3, Fri Jan 25

7

Using Transformations

• three ways• modelling transforms

• place objects within scene (shared world)• affine transformations

• viewing transforms• place camera• rigid body transformations: rotate, translate

• projection transforms • change type of camera• projective transformation

Page 8: Viewing/Projections I Week 3, Fri Jan 25

8

Rendering Pipeline

Scene graphObject geometry

ModellingTransforms

ViewingTransform

ProjectionTransform

Page 9: Viewing/Projections I Week 3, Fri Jan 25

9

Scene graphObject geometry

ModellingTransforms

ViewingTransform

ProjectionTransform

Rendering Pipeline

• result• all vertices of scene in shared

3D world coordinate system

Page 10: Viewing/Projections I Week 3, Fri Jan 25

10

Scene graphObject geometry

ModellingTransforms

ViewingTransform

ProjectionTransform

Rendering Pipeline

• result• scene vertices in 3D view

(camera) coordinate system

Page 11: Viewing/Projections I Week 3, Fri Jan 25

11

Scene graphObject geometry

ModellingTransforms

ViewingTransform

ProjectionTransform

Rendering Pipeline

• result• 2D screen coordinates of

clipped vertices

Page 12: Viewing/Projections I Week 3, Fri Jan 25

12

Viewing and Projection

• need to get from 3D world to 2D image

• projection: geometric abstraction• what eyes or cameras do

• two pieces• viewing transform:

• where is the camera, what is it pointing at?

• perspective transform: 3D to 2D• flatten to image

Page 13: Viewing/Projections I Week 3, Fri Jan 25

13

Rendering Pipeline

GeometryDatabaseGeometryDatabase

Model/ViewTransform.Model/ViewTransform. LightingLighting Perspective

Transform.PerspectiveTransform. ClippingClipping

ScanConversion

ScanConversion

DepthTest

DepthTest

TexturingTexturing BlendingBlendingFrame-buffer

Frame-buffer

Page 14: Viewing/Projections I Week 3, Fri Jan 25

14

Rendering Pipeline

GeometryDatabaseGeometryDatabase

Model/ViewTransform.Model/ViewTransform. LightingLighting Perspective

Transform.PerspectiveTransform. ClippingClipping

ScanConversion

ScanConversion

DepthTest

DepthTest

TexturingTexturing BlendingBlendingFrame-buffer

Frame-buffer

Page 15: Viewing/Projections I Week 3, Fri Jan 25

15

OpenGL Transformation Storage

• modeling and viewing stored together• possible because no intervening operations

• perspective stored in separate matrix

• specify which matrix is target of operations• common practice: return to default modelview

mode after doing projection operations

glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_PROJECTION);

Page 16: Viewing/Projections I Week 3, Fri Jan 25

16

Coordinate Systems

• result of a transformation• names

• convenience• mouse: leg, head, tail

• standard conventions in graphics pipeline• object/modelling• world• camera/viewing/eye• screen/window• raster/device

Page 17: Viewing/Projections I Week 3, Fri Jan 25

17

Projective Rendering Pipeline

OCS - object/model coordinate system

WCS - world coordinate system

VCS - viewing/camera/eye coordinate system

CCS - clipping coordinate system

NDCS - normalized device coordinate system

DCS - device/display/screen coordinate system

OCSOCS O2WO2W VCSVCS

CCSCCS

NDCSNDCS

DCSDCS

modelingmodelingtransformationtransformation

viewingviewingtransformationtransformation

projectionprojectiontransformationtransformation

viewportviewporttransformationtransformation

perspectiveperspectivedividedivide

object world viewing

device

normalizeddevice

clipping

W2VW2V V2CV2C

N2DN2D

C2NC2N

WCSWCS

Page 18: Viewing/Projections I Week 3, Fri Jan 25

18

Viewing Transformation

OCSOCS WCSWCS VCSVCSmodelingmodeling

transformationtransformationviewingviewing

transformationtransformation

OpenGL ModelView matrix

object world viewing

y

x

VCS

Peye

z

y xWCS

y

zOCS

imageplane

MMmodmod MMcamcam

Page 19: Viewing/Projections I Week 3, Fri Jan 25

19

Basic Viewing

• starting spot - OpenGL• camera at world origin

• probably inside an object

• y axis is up• looking down negative z axis

• why? RHS with x horizontal, y vertical, z out of screen

• translate backward so scene is visible• move distance d = focal length

• where is camera in P1 template code?• 5 units back, looking down -z axis

Page 20: Viewing/Projections I Week 3, Fri Jan 25

20

Convenient Camera Motion

• rotate/translate/scale versus• eye point, gaze/lookat direction, up vector

• demo: Robins transformation, projection

Page 21: Viewing/Projections I Week 3, Fri Jan 25

21

OpenGL Viewing Transformation

gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz)

• postmultiplies current matrix, so to be safe:

glMatrixMode(GL_MODELVIEW);glLoadIdentity();gluLookAt(ex,ey,ez,lx,ly,lz,ux,uy,uz)// now ok to do model transformations

• demo: Nate Robins tutorial projection

Page 22: Viewing/Projections I Week 3, Fri Jan 25

22

Convenient Camera Motion

• rotate/translate/scale versus• eye point, gaze/lookat direction, up vector

Peye

Pref

upview

eye

lookaty

z

xWCS

Page 23: Viewing/Projections I Week 3, Fri Jan 25

23

From World to View Coordinates: W2V

• translate eye to origin

• rotate view vector (lookat – eye) to w axis

• rotate around w to bring up into vw-plane

y

z

xWCS

v

u

VCS

Peyew

Pref

upview

eye

lookat

Page 24: Viewing/Projections I Week 3, Fri Jan 25

24

Deriving W2V Transformation

• translate eye to origin

T =

1 0 0 ex

0 1 0 ey

0 0 1 ez

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

y

z

xWCS

v

u

VCS

Peyew

Pref

upview

eye

lookat

Page 25: Viewing/Projections I Week 3, Fri Jan 25

25

Deriving W2V Transformation

• rotate view vector (lookat – eye) to w axis• w: normalized opposite of view/gaze vector g

w = −ˆ g = −g

g

y

z

xWCS

v

u

VCS

Peyew

Pref

upview

eye

lookat

Page 26: Viewing/Projections I Week 3, Fri Jan 25

26

Deriving W2V Transformation

• rotate around w to bring up into vw-plane• u should be perpendicular to vw-plane, thus

perpendicular to w and up vector t• v should be perpendicular to u and w

u =t × w

t × w

v = w × uy

z

xWCS

v

u

VCS

Peyew

Pref

upview

eye

lookat

Page 27: Viewing/Projections I Week 3, Fri Jan 25

27

Deriving W2V Transformation

• rotate from WCS xyz into uvw coordinate system with matrix that has columns u, v, w

• reminder: rotate from uvw to xyz coord sys with matrix M that has columns u,v,w

u =t × w

t × w

v = w × u

w = −ˆ g = −g

g

R =

ux vx wx 0

uy vy wy 0

uz vz wz 0

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

MW2V=TR

T =

1 0 0 ex

0 1 0 ey

0 0 1 ez

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

Page 28: Viewing/Projections I Week 3, Fri Jan 25

28

W2V vs. V2W

• MW2V=TR

• we derived position of camera in world• invert for world with respect to camera

• MV2W=(MW2V)-1=R-1T-1

• inverse is transpose for orthonormal matrices• inverse is negative for translations€

T−1 =

1 0 0 −ex

0 1 0 −ey

0 0 1 −ez

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

R−1 =

ux uy uz 0

vx vy vz 0

wx wy wz 0

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

T =

1 0 0 ex

0 1 0 ey

0 0 1 ez

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

R =

ux vx wx 0

uy vy wy 0

uz vz wz 0

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

Page 29: Viewing/Projections I Week 3, Fri Jan 25

29

W2V vs. V2W

• MW2V=TR

• we derived position of camera in world• invert for world with respect to camera

• MV2W=(MW2V)-1=R-1T-1

T =

1 0 0 ex

0 1 0 ey

0 0 1 ez

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

R =

ux vx wx 0

uy vy wy 0

uz vz wz 0

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

Mview2world

=

ux uy uz 0

vx vy vz 0

wx wy wz 0

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

1 0 0 −ex0 1 0 −ey0 0 1 −ez0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

=

ux uy uz −exvx vy vz −eywx wy wz −ez0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

Page 30: Viewing/Projections I Week 3, Fri Jan 25

30

Moving the Camera or the World?

• two equivalent operations• move camera one way vs. move world other way

• example• initial OpenGL camera: at origin, looking along -z axis

• create a unit square parallel to camera at z = -10

• translate in z by 3 possible in two ways• camera moves to z = -3

• Note OpenGL models viewing in left-hand coordinates

• camera stays put, but world moves to -7

• resulting image same either way• possible difference: are lights specified in world or view

coordinates?

Page 31: Viewing/Projections I Week 3, Fri Jan 25

31

World vs. Camera Coordinates Example

WW

a = (1,1)a = (1,1)WW

aa

b = (1,1)b = (1,1)C1 C1 = (5,3)= (5,3)WW

c = (1,1)c = (1,1)C2C2= = (1,3)(1,3)C1C1 = (5,5)= (5,5)WW

C1C1

bb

C2C2

cc