47
University of British Columbia CPSC 314 Computer Graphics Jan-Apr 2007 Tamara Munzner http://www.ugrad.cs.ubc.ca/~cs314/Vj an2007 Viewing/Projections II Week 4, Mon Jan 29

Viewing/Projections II Week 4, Mon Jan 29

  • Upload
    lyle

  • View
    17

  • Download
    1

Embed Size (px)

DESCRIPTION

http://www.ugrad.cs.ubc.ca/~cs314/Vjan2007. Viewing/Projections II Week 4, Mon Jan 29. News. extra TA coverage in lab to answer questions Mon 2-3:30 Wed 2-3:30 Thu 12:30-2 CSSS gateway: easy way to read newsgroup http://thecube.ca/webnews/newsgroups.php can post too if you create account. - PowerPoint PPT Presentation

Citation preview

Page 1: Viewing/Projections II Week 4, Mon Jan 29

University of British ColumbiaCPSC 314 Computer Graphics

Jan-Apr 2007

Tamara Munzner

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

Viewing/Projections II

Week 4, Mon Jan 29

Page 2: Viewing/Projections II Week 4, Mon Jan 29

2

News

• extra TA coverage in lab to answer questions• Mon 2-3:30

• Wed 2-3:30

• Thu 12:30-2

• CSSS gateway: easy way to read newsgroup• http://thecube.ca/webnews/newsgroups.php

• can post too if you create account

Page 3: Viewing/Projections II Week 4, Mon Jan 29

3

Reading for Today and Next Lecture

• FCG Chapter 7 Viewing

• FCG Section 6.3.1 Windowing Transforms

• RB rest of Chap Viewing

• RB rest of App Homogeneous Coords

Page 4: Viewing/Projections II Week 4, Mon Jan 29

4

Correction: RCS Basics• setup, just do once in a directory

• mkdir RCS

• checkin• ci –u p1.cpp

• checkout• co –l p1.cpp

• see history• rlog p1.cpp

• compare to previous version• rcsdiff p1.cpp

• checkout old version to stdout• co –p1.5 p1.cpp > p1.cpp.5

Page 5: Viewing/Projections II Week 4, Mon Jan 29

5

Review: Camera Motion

• rotate/translate/scale difficult to control

• arbitrary viewing position• eye point, gaze/lookat direction, up vector

Peye

Pref

upview

eye

lookaty

z

xWCS

Page 6: Viewing/Projections II Week 4, Mon Jan 29

6

Review: World to View Coordinates

• 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

⎥⎥⎥⎥

⎢⎢⎢⎢

•−•−•−

=

1000

2 ew

ev

eu

Mzyx

zyx

zyx

www

vvv

uuu

vw

Page 7: Viewing/Projections II Week 4, Mon Jan 29

7

Review: Moving Camera or 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 8: Viewing/Projections II Week 4, Mon Jan 29

8

Projections I

Page 9: Viewing/Projections II Week 4, Mon Jan 29

9

Pinhole Camera

• ingredients• box, film, hole punch

• result• picture www.kodak.com

www.pinhole.org

www.debevec.org/Pinhole

Page 10: Viewing/Projections II Week 4, Mon Jan 29

10

Pinhole Camera

• theoretical perfect pinhole• light shining through tiny hole into dark space

yields upside-down picture

film plane

perfectpinhole

one rayof projection

Page 11: Viewing/Projections II Week 4, Mon Jan 29

11

Pinhole Camera

• non-zero sized hole• blur: rays hit multiple points on film plane

film plane

actualpinhole

multiple raysof projection

Page 12: Viewing/Projections II Week 4, Mon Jan 29

12

Real Cameras

• pinhole camera has small aperture (lens opening)• minimize blur

• problem: hard to get enough light to expose the film

• solution: lens• permits larger apertures

• permits changing distance to film plane without actually moving it

• cost: limited depth of field where image is in focus

apertureaperture

lenslensdepthdepth

ofoffieldfield

http://en.wikipedia.org/wiki/Image:DOF-ShallowDepthofField.jpg

Page 13: Viewing/Projections II Week 4, Mon Jan 29

13

Graphics Cameras

• real pinhole camera: image inverted

imageimageplaneplane

eyeeye pointpoint

computer graphics camera: convenient equivalent

imageimageplaneplane

eyeeye pointpoint

center ofcenter ofprojectionprojection

Page 14: Viewing/Projections II Week 4, Mon Jan 29

14

General Projection

• image plane need not be perpendicular to view plane

imageimageplaneplane

eyeeye pointpoint

imageimageplaneplane

eyeeye pointpoint

Page 15: Viewing/Projections II Week 4, Mon Jan 29

15

Perspective Projection

• our camera must model perspective

Page 16: Viewing/Projections II Week 4, Mon Jan 29

16

Perspective Projection

• our camera must model perspective

Page 17: Viewing/Projections II Week 4, Mon Jan 29

17

Perspective Projections

• classified by vanishing points

one-pointone-pointperspectiveperspective

two-pointtwo-pointperspectiveperspective three-pointthree-point

perspectiveperspective

Page 18: Viewing/Projections II Week 4, Mon Jan 29

18

Projective Transformations

• planar geometric projections• planar: onto a plane

• geometric: using straight lines

• projections: 3D -> 2D

• aka projective mappings

• counterexamples?

Page 19: Viewing/Projections II Week 4, Mon Jan 29

19

Projective Transformations

• properties• lines mapped to lines and triangles to triangles

• parallel lines do NOT remain parallel• e.g. rails vanishing at infinity

• affine combinations are NOT preserved• e.g. center of a line does not map to center of

projected line (perspective foreshortening)

Page 20: Viewing/Projections II Week 4, Mon Jan 29

20

Perspective Projection

• project all geometry • through common center of projection (eye point)

• onto an image plane

xxzz xxzz

yy

xx

-z-z

Page 21: Viewing/Projections II Week 4, Mon Jan 29

21

Perspective Projection

how tall shouldthis bunny be?

projectionplane

center of projection(eye point)

Page 22: Viewing/Projections II Week 4, Mon Jan 29

22

Basic Perspective Projection

similar trianglessimilar triangles

→=z

y

d

y'

z

dyy

⋅='

zz

P(x,y,z)P(x,y,z)

P(x’,y’,z’)P(x’,y’,z’)

z’=dz’=d

yy

z

dxx

⋅='

• nonuniform foreshortening• not affine

dz ='butbut→=z

x

d

x'

Page 23: Viewing/Projections II Week 4, Mon Jan 29

23

Perspective Projection

• desired result for a point [x, y, z, 1]T projected onto the view plane:

• what could a matrix look like to do this?

dzdz

y

z

dyy

dz

x

z

dxx

z

y

d

y

z

x

d

x

==⋅

==⋅

=

==

',','

',

'

Page 24: Viewing/Projections II Week 4, Mon Jan 29

24

Simple Perspective Projection Matrix

⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢

d

dz

y

dz

x

/

/

Page 25: Viewing/Projections II Week 4, Mon Jan 29

25

Simple Perspective Projection Matrix

⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢

d

dz

y

dz

x

/

/ is homogenized version of

where w = z/d ⎥⎥⎥⎥

⎢⎢⎢⎢

dz

z

y

x

/

Page 26: Viewing/Projections II Week 4, Mon Jan 29

26

Simple Perspective Projection Matrix

⎥⎥⎥⎥

⎢⎢⎢⎢

⎥⎥⎥⎥

⎢⎢⎢⎢

=

⎥⎥⎥⎥

⎢⎢⎢⎢

10100

0100

0010

0001

/

z

y

x

ddz

z

y

x⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢

d

dz

y

dz

x

/

/ is homogenized version of

where w = z/d ⎥⎥⎥⎥

⎢⎢⎢⎢

dz

z

y

x

/

Page 27: Viewing/Projections II Week 4, Mon Jan 29

27

Perspective Projection

• expressible with 4x4 homogeneous matrix• use previously untouched bottom row

• perspective projection is irreversible• many 3D points can be mapped to same

(x, y, d) on the projection plane

• no way to retrieve the unique z values

Page 28: Viewing/Projections II Week 4, Mon Jan 29

28

Moving COP to Infinity

• as COP moves away, lines approach parallel• when COP at infinity, orthographic view

Page 29: Viewing/Projections II Week 4, Mon Jan 29

29

Orthographic Camera Projection

• camera’s back plane parallel to lens

• infinite focal length

• no perspective convergence

• just throw away z values

⎥⎥⎥

⎢⎢⎢

⎡=

⎥⎥⎥

⎢⎢⎢

0

y

x

z

y

x

p

p

p

⎥⎥⎥⎥

⎢⎢⎢⎢

⎥⎥⎥⎥

⎢⎢⎢⎢

=

⎥⎥⎥⎥

⎢⎢⎢⎢

11000

0000

0010

0001

1

z

y

x

z

y

x

p

p

p

Page 30: Viewing/Projections II Week 4, Mon Jan 29

30

Perspective to Orthographic

• transformation of space• center of projection moves to infinity

• view volume transformed • from frustum (truncated pyramid) to

parallelepiped (box)

-z-z

xx

-z-z

xx

FrustumFrustum ParallelepipedParallelepiped

Page 31: Viewing/Projections II Week 4, Mon Jan 29

31

View Volumes

• specifies field-of-view, used for clipping

• restricts domain of z stored for visibility test

z

perspective view volumeperspective view volume orthographic view volumeorthographic view volume

x=left

x=right

y=top

y=bottom z=-near z=-farxVCS x

z

VCS

yy

x=lefty=top

x=right

z=-far

z=-neary=bottom

Page 32: Viewing/Projections II Week 4, Mon Jan 29

32

Canonical View Volumes

• standardized viewing volume representation

perspective orthographic

orthogonal

parallel

x or y

-z

1

-1

-1frontplane

backplane

x or y

-zfrontplane

backplane

x or y = +/- z

Page 33: Viewing/Projections II Week 4, Mon Jan 29

33

Why Canonical View Volumes?

• permits standardization• clipping

• easier to determine if an arbitrary point is enclosed in volume with canonical view volume vs. clipping to six arbitrary planes

• rendering• projection and rasterization algorithms can be

reused

Page 34: Viewing/Projections II Week 4, Mon Jan 29

34

Normalized Device Coordinates

• convention• viewing frustum mapped to specific

parallelepiped• Normalized Device Coordinates (NDC)• same as clipping coords

• only objects inside the parallelepiped get rendered

• which parallelepiped? • depends on rendering system

Page 35: Viewing/Projections II Week 4, Mon Jan 29

35

Normalized Device Coordinates

left/right x =+/- 1, top/bottom y =+/- 1, near/far z =+/- 1

-z-z

xx

FrustumFrustum

z=-nz=-n z=-fz=-f

rightright

leftleft zz

xx

x= -1x= -1z=1z=1

x=1x=1

Camera coordinatesCamera coordinates NDCNDC

z= -1z= -1

Page 36: Viewing/Projections II Week 4, Mon Jan 29

36

Understanding Z

• z axis flip changes coord system handedness• RHS before projection (eye/view coords)

• LHS after projection (clip, norm device coords)

x

z

VCS

yx=left

y=top

x=right

z=-far

z=-neary=bottom

x

z

NDCS

y

(-1,-1,-1)

(1,1,1)

Page 37: Viewing/Projections II Week 4, Mon Jan 29

37

Understanding Z

near, far always positive in OpenGL calls

glOrtho(left,right,bot,top,near,far);glOrtho(left,right,bot,top,near,far); glFrustum(left,right,bot,top,near,far);glFrustum(left,right,bot,top,near,far); glPerspective(fovy,aspect,near,far);glPerspective(fovy,aspect,near,far);

orthographic view volumeorthographic view volume

x

z

VCS

yx=left

y=top

x=right

z=-far

z=-neary=bottom

perspective view volumeperspective view volume

x=left

x=right

y=top

y=bottom z=-near z=-farxVCS

y

Page 38: Viewing/Projections II Week 4, Mon Jan 29

38

Understanding Z

• why near and far plane?• near plane:

• avoid singularity (division by zero, or very small numbers)

• far plane:• store depth in fixed-point representation

(integer), thus have to have fixed range of values (0…1)

• avoid/reduce numerical precision artifacts for distant objects

Page 39: Viewing/Projections II Week 4, Mon Jan 29

39

Orthographic Derivation

• scale, translate, reflect for new coord sys

x

z

VCS

yx=left

y=top

x=right

z=-far

z=-neary=bottom

x

z

NDCS

y

(-1,-1,-1)

(1,1,1)

Page 40: Viewing/Projections II Week 4, Mon Jan 29

40

Orthographic Derivation

• scale, translate, reflect for new coord sys

x

z

VCS

yx=left

y=top

x=right

z=-far

z=-neary=bottom

x

z

NDCS

y

(-1,-1,-1)

(1,1,1)

byay +⋅='1'

1'

−=→==→=

ybotyytopy

Page 41: Viewing/Projections II Week 4, Mon Jan 29

41

Orthographic Derivation

• scale, translate, reflect for new coord sys

byay +⋅='1'

1'

−=→==→=

ybotyytopy

bottop

bottopb

bottop

topbottopb

bottop

topb

btopbottop

−−−

=

−⋅−−

=

−⋅

−=

+−

=

2)(

21

21

bbota

btopa

+⋅=−+⋅=

11

bottopa

topbota

topabota

botatopa

botabtopab

−=

+−=⋅−−⋅−=−−

⋅−−=⋅−⋅−−=⋅−=

2)(2

)()1(111

1,1

Page 42: Viewing/Projections II Week 4, Mon Jan 29

42

Orthographic Derivation

• scale, translate, reflect for new coord sys

x

z

VCS

yx=left

y=top

x=right

z=-far

z=-neary=bottom

byay +⋅='1'

1'

−=→==→=

ybotyytopy

bottop

bottopb

bottopa

−+

−=

−=

2

same idea for right/left, far/near same idea for right/left, far/near

Page 43: Viewing/Projections II Week 4, Mon Jan 29

43

Orthographic Derivation

• scale, translate, reflect for new coord sys

P

nearfar

nearfar

nearfar

bottop

bottop

bottop

leftright

leftright

leftright

P

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

−+

−−−

−+

−−

−+

−−

=

1000

200

02

0

002

'

Page 44: Viewing/Projections II Week 4, Mon Jan 29

44

Orthographic Derivation

• scale, translate, reflect for new coord sys

P

nearfar

nearfar

nearfar

bottop

bottop

bottop

leftright

leftright

leftright

P

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

−+

−−−

−+

−−

−+

−−

=

1000

200

02

0

002

'

Page 45: Viewing/Projections II Week 4, Mon Jan 29

45

Orthographic Derivation

• scale, translate, reflect for new coord sys

P

nearfar

nearfar

nearfar

bottop

bottop

bottop

leftright

leftright

leftright

P

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

−+

−−−

−+

−−

−+

−−

=

1000

200

02

0

002

'

Page 46: Viewing/Projections II Week 4, Mon Jan 29

46

Orthographic Derivation

• scale, translate, reflect for new coord sys

P

nearfar

nearfar

nearfar

bottop

bottop

bottop

leftright

leftright

leftright

P

⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢

−+

−−−

−+

−−

−+

−−

=

1000

200

02

0

002

'

Page 47: Viewing/Projections II Week 4, Mon Jan 29

47

Orthographic OpenGL

glMatrixMode(GL_PROJECTION);glMatrixMode(GL_PROJECTION);glLoadIdentity();glLoadIdentity();glOrtho(left,right,bot,top,near,far);glOrtho(left,right,bot,top,near,far);