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

Viewing/Projections I Week 3, Fri Jan 24

  • Upload
    robert

  • View
    33

  • Download
    3

Embed Size (px)

DESCRIPTION

http://www.ugrad.cs.ubc.ca/~cs314/Vjan2007. Viewing/Projections I Week 3, Fri Jan 24. 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

Citation preview

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

University of British ColumbiaCPSC 314 Computer Graphics

Jan-Apr 2007

Tamara Munzner

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

Viewing/Projections I

Week 3, Fri Jan 24

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

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 24

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 24

4

Review: Normals

• polygon:

• assume vertices ordered CCW when viewed from visible side of polygon

• normal for a vertex• specify polygon orientation• used for lighting• supplied by model (i.e., sphere),

or computed from neighboring polygons

1P

N

2P

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

N

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

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 24

6

Viewing

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

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 24

8

Rendering Pipeline

Scene graphObject geometry

ModellingTransforms

ViewingTransform

ProjectionTransform

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

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 24

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 24

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 24

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 24

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 24

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 24

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 24

16

Coordinate Systems

• result of a transformation• names

• convenience• armadillo: 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 24

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 24

18

Viewing Transformation

OCSOCS WCSWCS VCSVCSmodelingmodeling

transformationtransformationviewingviewing

transformationtransformation

Mmod

Mcam

OpenGL ModelView matrix

object world viewing

y

x

VCS

Peye

z

y xWCS

y

zOCS

imageplane

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

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

• can use rotate/translate/scale to move camera• demo: Nate Robins tutorial transformations

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

20

Viewing in Project 1

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

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

21

Convenient Camera Motion

• rotate/translate/scale not intuitive

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

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

22

Convenient Camera Motion

• rotate/translate/scale not intuitive

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

Peye

Pref

upview

eye

lookaty

z

xWCS

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

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 24

24

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 25: Viewing/Projections I Week 3, Fri Jan 24

25

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 26: Viewing/Projections I Week 3, Fri Jan 24

26

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 27: Viewing/Projections I Week 3, Fri Jan 24

27

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 28: Viewing/Projections I Week 3, Fri Jan 24

28

Deriving W2V Transformation

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

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

that has rows u,v,w

u =t × w

t × w

R =

ux uy uz 0

vx vy vz 0

wx wy wz 0

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥€

v = w × u

w = −ˆ g = −g

g

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

29

Deriving W2V Transformation

• M=RT

Mworld− > view

=

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 −u • e

vx vy vz −v • e

wx wy wz −w • e

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

T =

1 0 0 −ex

0 1 0 −ey

0 0 1 −ez

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

R =

ux uy uz 0

vx vy vz 0

wx wy wz 0

0 0 0 1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

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

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 24

31

World vs. Camera Coordinates

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