3d viewing 5542 - computer science and...

47
3D viewing Set up a 3D scene is like taking a photograph

Upload: others

Post on 06-Apr-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

3D viewing Set up a 3D scene is like taking a

photographp g p

Page 2: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Viewing

Position and orient your camera

Page 3: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Projection

Control the “lens” of the camera Project the object from 3D world to 2D screen Project the object from 3D world to 2D screen

Page 4: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Viewing Important camera parameters to specify

Camera (eye) position (Ex,Ey,Ez) in world coordinate system

Center of interest (coi) (cx, cy, cz) Orientation (which way is up?) View up vector Orientation (which way is up?) View-up vector

(Up_x, Up_y, Up_z)

world(ex, ey, ez)

view up vectorworld(cx, cy, cz)

view up vector(Up_x, Up_y, Up_z)

Page 5: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Viewing

Camera position and orientation forms a camera (eye) coordinate framecamera (eye) coordinate frame

uv n

ld

ny

Eye coordinate frame coi

Transform objects from world to eye space

world x

z

Transform objects from world to eye space

Page 6: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Eye Space

Right hand coordinate system

uv ny

(1,0,0)(0,1,0)(0,0,1)

world x

y(0,0,0)

coi

z

Transform to eye space can simplify many d t ti ( h j ti ) i thdownstream operations (such as projection) in the pipeline

Page 7: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

OpenGL fixed function pipeline

In OpenGL:- gluLookAt (Ex, Ey, Ez, cx, cy, cz,

Up_x, Up_y, Up_z) h ll ( )- The view up vector is usually (0,1,0)

- Remember to set the OpenGL matrix mode to GL MODELVIEW firstGL_MODELVIEW first

Page 8: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

OpenGL fixed function pipeline

void display() {{

glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); lL dId i ()glLoadIdentity();

gluLookAt(0,0,1,0,0,0,0,1,0);my_display(); // your display routiney_ p y(); // y p y

}

Page 9: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Demo

Page 10: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Projection Transformation

Control how to project the object from 3D 2D3D to 2D Perspective or Orthographic Field of view and image aspect ratio Near and far clipping planes

Page 11: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Orthographic Projection

No foreshortening effect – distance from camera does not mattercamera does not matter

The projection center is at infinite

Projection calculation – just drop z coordinates

Page 12: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection

Characterized by object foreshorteningObj t t b l if th l t- Objects appear to be larger if they are closer to

the camera- This is what happens in the real worldThis is what happens in the real world

Need: Projection center camera Field of View Image, near, far planes

Projection: Connecting the object

camera

Projection: Connecting the objectto the projection center

projection plane

Page 13: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Field of View

Determine how much of the world is taken into the picturepicture

yyfield of view

center of projection

y

z

y

z

The larger is the field view, the smaller is the object projection size

x

projection size

Page 14: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Near and Far Clipping Planes

Only objects between near and far planes are drawndrawn

y

Near plane Far plane

x

z

Near plane + far plane + field of view = Viewing FrustumViewing Frustum

Page 15: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Viewing Frustum

3D counterpart of 2D world clip window

y

Near plane Far plane

x

y

z

Obj t t id th f t li d

x

Viewing Frustum

Objects outside the frustum are clipped

Page 16: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Projection Transformation

In OpenGL fixed function pipeline:S t th t i d t Set the matrix mode to GL_PROJECTION

Perspective projection: use gluPerspective(fovy, aspect, near, far) or glFrustum(left, right, bottom, top, near, far)

Orthographic: glOrtho(left, right, bottom, top, near, far)

Page 17: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

gluPerspective(fovy, aspect, near, far)

Aspect ratio is used to calculate the i d id hwindow width

y

z

y

z fovyw

hx

eye

near farAspect = w / h

h

Page 18: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

glFrustum(left, right, bottom, top, near, far)

Or You can use this function in place of gluPerspective()g p ()

left top

y

z

xright

bottom

near far

Page 19: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

glOrtho(left, right, bottom, top, near, far)

For orthographic projection

y

left top

z

x

rightbottom

nearfar

Page 20: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Projection Transformation

void display() {{

glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJETION); lL dId i ()glLoadIdentity();

gluPerspective(fove, aspect, near, far);glMatrixMode(GL_MODELVIEW); g ( _ );glLoadIdentity(); gluLookAt(0,0,1,0,0,0,0,1,0); my display(); // your display routinemy_display(); // your display routine

}

Page 21: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Demo

Page 22: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

3D viewing under the hood

M d li Vi i P j tiModeling Viewing Projection Transformation Transformation Transformation

Vi tViewport Transformation

Di lDisplay

Page 23: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

3D viewing under the hood

Topics of Interest:

Viewing transformation Projection transformation

Page 24: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Viewing Transformation

Transform the object from world to eye j yspace Construct an eye space coordinate framey p Construct a matrix to perform the

coordinate transformation

Page 25: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Eye Coordinate Frame

Known: eye position, center of interest, view-up vectorvector

To find out: new origin and three basis vectors

eye

center of interest (COI)Assumption: the direction of view is orthogonal to the view plane (the plane that objects will be projected onto)

90o

Page 26: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Eye Coordinate Frame (2) Origin: eye position (that was easy) Three basis vectors: one is the normal vector (n) of ( )

the viewing plane, the other two are the ones (u and v) that span the viewing plane

v n is pointing away from the

eyeCenter of interest (COI)

uv n is pointing away from the

world because we use righthand coordinate system

N COIeyen

world origin

N = eye – COIn = N / | N |

world originRemember u,v,n should be all unit vectors (u,v,n should be orthogonal to each other)

Page 27: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Eye Coordinate Frame (3)

How about u and v?

uv

V_up

We can get u first -

u is a vector that is perpendicular

eyeCOI

n

u u is a vector that is perpendicularto the plane spanned by N and view up vector (V_up)

n

U = V_up x n

u = U / | U |u = U / | U |

Page 28: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Eye Coordinate Frame (4)

How about v? Knowing n and u, getting v iseasy

uv

V_up

easy

eyeCOI

n

u

v = n x u

v is already normalizedn v is already normalized

Page 29: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Eye Coordinate Frame (5)

Put it all together Eye space origin: (Eye.x , Eye.y, Eye.z)

uv

V_up

Basis vectors:

n = (eye – COI) / | eye – COI| (V ) / | V |

eyeCOI

n

uu = (V_up x n) / | V_up x n | v = n x u

n

Page 30: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

World to Eye Transformation

Transformation matrix (M w2e) ?

P’ = M w2e x P

v 1 C i h h f iuv

nyP

1. Come up with the transformationsequence to move eye coordinate frame to the world

world

x

2. And then apply this sequence to the point P in a reverse order

z

Page 31: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

World to Eye Transformation

Rotate the eye frame so that it will be “aligned” with the world framethe world frame

Translate (-ex, -ey, -ez)

v

Rotation: ux uy uz 0vx vy vz 0

uv

ny

(ex ey ez)

vx vy vz 0nx ny nz 00 0 0 1

H t if th t ti t i ?world

x

(ex,ey,ez) How to verify the rotation matrix?

Translation: 1 0 0 -ex 0 1 0 -ey

z

y0 0 1 -ez 0 0 0 1

Page 32: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

World to Eye Transformation (2)

Transformation order: apply the transformation to the object in a reverse order - translation first and thenobject in a reverse order translation first, and then rotate

Mw2e = ux uy ux 0 1 0 0 -ex vx vy vz 0 0 1 0 -ey

uv

y ynx ny nz 0 0 0 1 -ez0 0 0 1 0 0 0 1

n

worldx

y(ex,ey,ez)

x

z

Page 33: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

World to Eye Transformation (3)

Head tilt: Rotate your head by Just rotate the object about the eye space z axis Just rotate the object about the eye space z axis -

Mw2e = cos(- -sin(- 0 0 ux uy ux 0 1 0 0 -ex sin(- cos(- 0 0 vx vy vz 0 0 1 0 -ey0 0 1 0 nx ny nz 0 0 0 1 ez0 0 1 0 nx ny nz 0 0 0 1 -ez0 0 0 1 0 0 0 1 0 0 0 1

uv un

worldx

y Why - ?

When you rotate your head by , it is like rotate the object by –x

z

rotate the object by

Page 34: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Projection Transformation

Projection – map the object from 3D space to 2D screen

y

z

y

z

x

z

x

z

Perspective: gluPerspective() Parallel: glOrtho()

Page 35: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Parallel Projection

After transforming the object to the eye space, parallel projection is relative easy – we could just p p j y jdrop the Z

Xp = x (Xp, Yp)

Yp = y Zp = -d

(Xp, Yp)

We actually want to keep Z – why?

x

y

z(x,y,z)

x

Page 36: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Parallel Projection (2)

OpenGL maps (projects) everything in h i ibl l i i l ithe visible volume into a canonical view

volume(1, 1, 1)

(xmax, ymax, -far)

(-1, -1, -1)(xmin, ymin, -near)

Canonical View VolumeglOrtho(xmin, xmax, ymin, ymax, near, far)

Page 37: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Parallel Projection (3)

Transformation sequence: 1 T anslation (M1) ( f )1. Translation (M1): (-near = zmax, -far = zmin)

-(xmax+xmin)/2, -(ymax+ymin)/2, -(zmax+zmin)/2

2 Scaling (M2):2. Scaling (M2):2/(xmax-xmin), 2/(ymax-ymin), -2/(zmax-zmin)

2/(xmax-xmin) 0 0 - (xmax+xmin)/(xmax-xmin)M2 x M1 = 0 2/(ymax-ymin) 0 - (ymax+ymin)/(ymax-ymin)

0 0 -2/(zmax-zmin) -(zmax+zmin)/(zmax-zmin) 0 0 0 10 0 0 1

Page 38: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection

Side view: y

z

xProjection plane

(x,y,z)y

(0,0,0)

(x,y,z)

(x’,y’,z’)

yBased on similar triangle:

y -z y’ d=

d

-z

z y’ d

dY’ = y x

Eye (projection center)

y-z

Page 39: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection (2)

Same for x. So we have:x’ = x x d / -zx x x d / z y’ = y x d / - z z’ = -d

Put in a matrix form: Put in a matrix form:

x’ 1 0 0 0 xy’ = 0 1 0 0 yy = 0 1 0 0 yz’ 0 0 1 0 zw 0 0 (1/-d) 0 1

OpenGL assume d = near, i.e. the image plane is at z = -near

Page 40: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection (3) We are not done yet. We want to somewhat keep the z

information so that we can perform depth comparison

Use pseudo depth – OpenGL maps the near plane to -1, and far plane to 1

Need to modify the projection matrix: solve a and b x’ 1 0 0 0 x y’ = 0 1 0 0 yz’ 0 0 a b zw 0 0 (1/-d) 0 1

yz

x

Z = -1 z = 1 How to solve a and b?

Page 41: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection (4)

Solve a and b x’ 1 0 0 0 x

y’ 0 1 0 0 yy = 0 1 0 0 y

z’ 0 0 a b z

w 0 0 (1/-d) 0 1

(0,0,-1) = M x (0,0,-near)(0,0,1) = M x (0,0,-far)

T

T

T

T M(0,0,1) M x (0,0, far)

a = (far+near)/(d*(far-near)) Verify this!

b = (2 x far x near) / (d*(far-near))

Page 42: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection (5) Not done yet. OpenGL also normalizes the x and y

ranges of the viewing frustum to [-1, 1] (translate and scale)and scale)

y

(1, 1)

far

x

yz

eye

near

(top view)

And takes care the case that eye is not at the center

Z = 1 z = -1 (-1, -1)(top view)

And takes care the case that eye is not at the center of the view volume (shear)

Page 43: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection (6) Final Projection Matrix:

x’ 2N/(xmax-xmin) 0 (xmax+xmin)/(xmax-xmin) 0 x

y’ = 0 2N/(ymax-ymin) (ymax+ymin)/(ymax-ymin) 0 y

z’ 0 0 -(F + N)/(F-N) -2F*N/(F-N) zz 0 0 -(F + N)/(F-N) -2F*N/(F-N) z

w’ 0 0 -1 0 1

glFrustum(xmin, xmax, ymin, ymax, N, F) N = near plane, F = far planeg ( , , y , y , , ) p , p

Page 44: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Perspective Projection (7)

After perspective projection, the viewing frustum is also projected into a canonical view volume (like in p j (parallel projection)

(1, 1, -1)y

(-1, -1, 1)x

z

Canonical View Volume

Page 45: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Flexible Camera Control

Instead of provide COI, it is possible to just give camera orientationgive camera orientation

Just like control a airplane’s orientation

y y

x

x

pitch yaw roll

Page 46: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Flexible Camera Control

How to compute the viewing vector (x,y,z) from pitch() and yaw() ?from pitch() and yaw() ?

x Rcos()cos()z = Rcos()cos(90-)

y = 0 = 0

R

y x = Rcos()cos()

x

R

R cos()x

()

y = Rsin()z

z

Page 47: 3d viewing 5542 - Computer Science and Engineeringweb.cse.ohio-state.edu/.../8-3D_viewing.pdfPerspective Projection (3) We are not done yet. We want to somewhat keep the z information

Flexible Camera Control

gluLookAt() does not let you to control pitch and yawand yaw

you need to compute/maintain the vector by yourselfyourself

And then calculate COI = Eye + (x,y,z) before you can call gluLookAt()before you can call gluLookAt().