#2: Geometry & Homogeneous Coordinates CSE167: Computer Graphics Instructor: Ronen Barzel UCSD,...

Post on 20-Dec-2015

220 views 2 download

Transcript of #2: Geometry & Homogeneous Coordinates CSE167: Computer Graphics Instructor: Ronen Barzel UCSD,...

#2: Geometry & Homogeneous Coordinates

CSE167: Computer Graphics

Instructor: Ronen Barzel

UCSD, Winter 2006

2

Outline for Today

More math…n Finish linear algebra: Matrix

composition1. Points, Vectors, and

Coordinate Frames2. Homogeneous Coordinates

3

Matrix Multiplication

Each entry is dot product of row of M with column of N

M =mxx mxy mxz

myx myy myz

mzx mzy mzz

⎢⎢⎢

⎥⎥⎥      N =

nxx nxy nxz

nyx nyy nyz

nzx nzy nzz

⎢⎢⎢

⎥⎥⎥

L =M N

lxx lxy lxzlyx lyy lyzlzx lzy lzz

⎢⎢⎢

⎥⎥⎥=

mxx mxy mxz

myx myy myz

mzx mzy mzz

⎢⎢⎢

⎥⎥⎥⋅

nxx nxy nxz

nyx nyy nyz

nzx nzy nzz

⎢⎢⎢

⎥⎥⎥

lxy =mxxnxy + mxynyy + mxznzy

4

Matrix Multiplication

M =mxx mxy mxz

myx myy myz

mzx mzy mzz

⎢⎢⎢

⎥⎥⎥                N =

nxx nxy nxz

nyx nyy nyz

nzx nzy nzz

⎢⎢⎢

⎥⎥⎥     

MN( )ij = miknkj∑

MN =

mxknkx∑ mxknky∑ mxknkz∑myknkx∑ myknky∑ myknkz∑mzknkx∑ mzknky∑ mzknkz∑

⎢⎢⎢

⎥⎥⎥

MN =

mxxnxx + mxynyx + mxznzx( ) mxxnxy + mxynyy + mxznzy( ) mxxnxz + mxynyz + mxznzz( )

myxnxx + myynyx + myznzx( ) myxnxy + myynyy + myznzy( ) myxnxz + myynyz + myznzz( )

mzxnxx + mzynyx + mzznzx( ) mzxnxy + mzynyy + mzznzy( ) mzxnxz + mzynyz + mzznzz( )

⎢⎢⎢⎢

⎥⎥⎥⎥

5

Multiple Transformations If we have a vector v, and an x-axis rotation

matrix Rx, we can generate a rotated vector v′:

If we wanted to then rotate that vector around the

y-axis, we could multiply by another matrix:

′v = Rx θ( )  v

′′v = Ry φ( )   ′v

′′v = Ry φ( )   Rx θ( )  v( )

6

We can extend this to the concept of applying any sequence of transformations:

Because matrix algebra obeys the associative law, we can regroup this as:

This allows us to compose them into a single matrix:

Multiple Transformations

′v =M4   M3   M2   M1  v( )( )( )

′v = M4  M3  M2  M1( ) v

Mtotal =M 4  M 3 M 2 M1

′v =M total  v

7

Order matters! Matrix multiplication does NOT commute:

(unless one or the other is a uniform scale) Try this:

rotate 90 degrees about x then 90 degrees about z, versusrotate 90 degrees about z then 90 degrees about x.

Matrix composition works right-to-left. Compose:

Then apply it to a vector:

It first applies C to v, then applies B to the result, then applies A to the result of that.

M N ≠N M

′v =M v

′v = A B C( ) v

′v = A  B  C v( )( )

M =A B C

8

Quick Matrix algebra summary

linearity:

M (sb) =s M b( )

M a+b( ) = M a( ) + M b( )

M−1 is inverse of M :  (when it exists)

M−1 M a( ) =a

M−1M =I

MM−1 =I

MPQ( )−1 =Q−1P−1M−1

for a rotation: R−1 =RT

determinant M :    

M >1             scales up

M =1             pure rotation

0< M <1    scales down

M =0             "flattens": singular matrix, no inverse

M < 0            reflects

⎪⎪⎪

⎪⎪⎪

M−1 =1M

9

What good is this?

Composition of transformations, by matrix multiplication, is a basic technique Used all the time You’ll probably use it for Project 1 All linear operations on vectors can be expressed as composition of rotation and scale (even “shear”)

But there’s a limit to what we can do only having linear operations on vectors….

10

Outline for Today

1. Finish linear algebra: Matrix composition

2. Points, Vectors and Coordinate Frames

3. Homogeneous Coordinates

11

Geometric objects

Interesting Objects Points Vectors Transformations Coordinate Frames Also: Lines, Rays, Planes, Normals, …

12

Points and vectors

You know linear algebra, vector spaces

Why am I talking about this? Emphasize differences:

between a point and a vector between a point or vector and the representation of a point or vector

13

Points and vectors

in R3, can represent point as 3 numbers

in R3, can represent vector as 3 numbers

Easy to think they’re the same thing… …but they’re not! different operations, different behaviors many program libraries make this mistake easy to have bugs in programs

14

In 1D, consider time

point in time: a class meets at 2PM duration of time: a class lasts 2 hours operations:

class at 2PM + class at 3PM ≠ class at 5PM !! 2 hour class + 3 hour class = 5 hours of classes

class ends at 5PM – starts at 2PM = 3 hour class

class starts at 2PM + lasts 3 hours = ends at 5PM

2 classes at 3PM ≠ one class at 6PM !! 2 classes last 3 hours = 6 hours of classes Class from 2PM to 10PM, half done at

1

22PM( )+

12

6PM( ) = 4PM

("affine combination")1 24 4 44 34 4 4 4

15

“Coordinate Systems” for time

Knowing just the hour number doesn’t tell you everything…

AM vs. PM (or use 8h00 vs 20h00) Time zones: same point, many representations

10 (Paris) == 9 (London) to remove ambiguity, often use GMT

If always staying in local time zone, not important if scheduling globally, must be careful. convert from one time zone to another.

(Also, hours only good within one day need to specify date & time UNIX time: seconds since 01/01/1970, 00h00 GMT)

Notice: time durations are unaffected by all this!

16

Geometry, analogously

Point describes a location in space can subtract points to get a vector can take weighted average of points to get a point

Vector describes a displacement in space has a magnitude and direction can add, subtract, scale vectors can add vector to a point to get a point

To represent them as three numbers, you must specify which coordinate system

17

Vector and point arithmetic

C++ classes can support these

operations

rw =

ru+

rv           vector+vector →  vector

rv=

rw−

ru           vector-vector →  vector

ru=s 

rv               scale a vector

q=p+rv           point+vector→ point

rv=q−p           point-point →  vector

r =14

p+34

q     weighted average of points → point

18

Coordinate Frames Origin point, and 3 orthonormal vectors for x,y,z

axes (right-handed)

In CG, often work with many different frames simultaneously

f

g

h

a

bc

x

y

z

O

P

Q

o,rx,

ry,

rz

p,

ra,

rb,

rc

q,

rf,

rg,

rh

19

Coordinates If you have coordinate triples such as:

Then, with frame such as you can construct a point or vector:

Same coordinates, different frame different point or vector Coordinates have no real meaning without a frame CG programs often have lots of frames--you have to keep track!

• (It’s possible to write C++ classes that keep track of frames. But it’s hard for them to be time- and memory-efficient, so it’s rarely done in practice.)

Typically have “World Coordinates” as implicit base frame

Notice: vectors don’t depend on the origin of the frame, only the axes

3

6

1

⎢⎢⎢

⎥⎥⎥    or     

9−25

⎢⎢⎢

⎥⎥⎥

p =o+ 3rx+ 6

ry+

rz

rv=      9

rx−2

ry+ 5

rz

o,rx,

ry,

rz

20

Coordinates of a Frame

Suppose you have a frame In world coordinates, might have

But in itself always have coordinates:

p,

ra,

rb,

rc

p =1033

⎢⎢⎢

⎥⎥⎥    

ra=

0−11

⎢⎢⎢

⎥⎥⎥    

rb=

0.7070

0.707

⎢⎢⎢

⎥⎥⎥    

rc=

−0.7070

0.707

⎢⎢⎢

⎥⎥⎥

p,

ra,

rb,

rc

p =000

⎢⎢⎢

⎥⎥⎥    

ra=

100

⎢⎢⎢

⎥⎥⎥    

rb=

010

⎢⎢⎢

⎥⎥⎥    

rc=

001

⎢⎢⎢

⎥⎥⎥

21

Coordinate equivalences

Given a frame: Can have a point with some coords:

Can have a vector with same coords:

Formally, we have:

Informally, p and v look and act about the same• People often sloppy, don’t distinguish point from vector

• Can only get away with it if you stay in same frame!• And even then need to be careful…

rv =

abc

⎢⎢⎢

⎥⎥⎥

o,rx,

ry,

rz

p =abc

⎢⎢⎢

⎥⎥⎥

p =o+rv

rv=p−o

O rx

ry

rz

rv

p

b

ca

22

Outline for Today

1. Finish linear algebra: Matrix composition

2. Points, Vectors and Coordinate Frames

3. Homogeneous Coordinates But first: transforming points

23

Linear TransformationsMatrix-vector multiplicatio

n

Matrix-point multiplicatio

n

M

Rotation matrix Rotates vector direction

Moves point by rotating

about origin of frame

Scale matrix Scales vector magnitude

Moves point towards or away from origin of

frame

Mrv =

mxx mxy mxz

myx myy myz

mzx mzy mzz

⎢⎢⎢

⎥⎥⎥

vx

vy

vz

⎢⎢⎢

⎥⎥⎥

Mp =mxx mxy mxz

myx myy myz

mzx mzy mzz

⎢⎢⎢

⎥⎥⎥

px

py

pz

⎢⎢⎢

⎥⎥⎥

24

Rotating an object Object defined as collection of points Apply rotation matrix to every point:

Rotates object about origin of frame

Also rotates all vectors in object:

rv =p2 −p1r′v = ′p2 − ′p1 = Rp2( )− Rp1( ) =R(p2 −p1) =R

rv

p1K pN

′pi = R pi , for all i

25

Scaling an object

Apply scale matrix to every point:

Scale object about origin of frame

Also scales all vectors in object

′pi = S pi , for all i

rv =p2 −p1r′v = ′p2 − ′p1 = Sp2( )− Sp1( ) =S(p2 −p1) =S

rv

26

Moving an object

Add displacement vector to each point:

Translates the object:

Vectors don’t change:

d

′pi = pi +rd,    for all i

rv =p2 −p1r′v = ′p2 − ′p1 = p2 +

rd( )− p1 +

rd( ) =(p2 −p1) + (

rd−

rd) =

rv+ 0 =

rv

27

General Object Transformation

Some matrix M and displacement d:

Math note: the transformation for p isn’t linear• It’s an affine transformation• Points and their transforms form an affine space• Not a vector space

′p =M p +rd

r′v =M 

rv

28

But it’s very inconvenient

Different rule for points vs. vectors

Hard to compose transformations:

Hard to invert, etc.

…so introduce Homogeneous Coordinates

′p =Mp +rd

′′p = N ′p +re = NM( )p + N

rd +

re( )

′′′p =Q ′′p +rf = QNM( )p + QN( )

rd +Q

re +

rf( )

29

Homogeneous coordinates

Basic: a trick to unify/simplify computations.

Deeper: projective geometry Interesting mathematical properties Good to know, but less immediately practical

We will use some aspect of this when we do perspective projection (in a few weeks)

30

Homogeneous coordinates Add an extra component. 1 for a point, 0 for a

vector:

combine M and d into single 4x4 matrix:

And see what happens when we multiply…

p =

px

py

pz

1

⎢⎢⎢⎢

⎥⎥⎥⎥

        rv=

vx

vy

vz

0

⎢⎢⎢⎢

⎥⎥⎥⎥

mxx mxy mxz dxmyx myy myz dymzx mzy mzz dz0 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

31

Homogeneous point transform

Transform a point:

Top three rows are the affine transform! Bottom row stays 1

′px′py′pz

1

⎢⎢⎢⎢

⎥⎥⎥⎥

 =

mxx mxy mxz dxmyx myy myz dymzx mzy mzz dz0 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

pxpypz1

⎢⎢⎢⎢

⎥⎥⎥⎥

=

mxx px + mxy py + mxz pz + dxmyx px + myy py + myz pz + dymzx px + mzy py + mzz pz + dz

0 + 0 + 0 +1

⎢⎢⎢⎢

⎥⎥⎥⎥

                                                         M

pxpypz

⎢⎢⎢

⎥⎥⎥    +    

rd

32

Homogeneous vector transform

Transform a vector:

Top three rows are the linear transform• Displacement d is properly ignored

Bottom row stays 0

′vx′vy′vz

0

⎢⎢⎢⎢

⎥⎥⎥⎥

 =

mxx mxy mxz dxmyx myy myz dymzx mzy mzz dz0 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

vxvyvz0

⎢⎢⎢⎢

⎥⎥⎥⎥

=

mxxvx + mxyvy + mxzvz + 0

myxvx + myyvy + myzvz + 0

mzxvx + mzyvy + mzzvz + 0

0 + 0 + 0 + 0

⎢⎢⎢⎢

⎥⎥⎥⎥

                                                           M

vxvyvz

⎢⎢⎢

⎥⎥⎥ 

33

Homogeneous arithmetic

Legal operations always end in 0 or 1!

vector+vector:       M

0

⎣⎢

⎦⎥+

M

0⎡

⎣⎢

⎦⎥⇒

M

0⎡

⎣⎢

⎦⎥

vector-vector:       M

0⎡

⎣⎢

⎦⎥−

M

0⎡

⎣⎢

⎦⎥⇒

M

0⎡

⎣⎢

⎦⎥

scalar*vector:               sM

0⎡

⎣⎢

⎦⎥⇒

M

0⎡

⎣⎢

⎦⎥

point+vector:         M

1⎡

⎣⎢

⎦⎥+

M

0⎡

⎣⎢

⎦⎥⇒

M

1⎡

⎣⎢

⎦⎥

point-point:         M

1⎡

⎣⎢

⎦⎥−

M

1⎡

⎣⎢

⎦⎥⇒

M

0⎡

⎣⎢

⎦⎥

point+point:        M

1⎡

⎣⎢

⎦⎥+

M

1⎡

⎣⎢

⎦⎥⇒

M

2⎡

⎣⎢

⎦⎥

scalar*point:                sM

1⎡

⎣⎢

⎦⎥⇒

M

s⎡

⎣⎢

⎦⎥

weighted average

affine combination

⎧⎨⎩

⎫⎬⎭ of points:   

13

M

1⎡

⎣⎢

⎦⎥+

23

M

1⎡

⎣⎢

⎦⎥⇒

M

1⎡

⎣⎢

⎦⎥

34

Homogeneous Transforms Rotation, Scale, and Translation of points and vectors unified in a single matrix transformation:

Matrix has the form: Last row always 0,0,0,1

Transforms compose by matrix multiplication! Same caveat: order of operations is important Same note: Transforms operate right-to-left

mxx mxy mxz dxmyx myy myz dymzx mzy mzz dz0 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

′p =M p

35

Primitive Transforms

I=

1 0 0 00 1 0 00 0 1 00 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

S(sx,sy,sz) =

sx 0 0 00 sy 0 00 0 sz 00 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

Rx(θ) =  

1 0 0 00 cos(θ) −sin(θ) 00 sin(θ) cos(θ) 00 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

R y(θ) =

cos(θ) 0 sin(θ) 00 1 0 0

−sin(θ) 0 cos(θ) 00 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

  R z(θ) =

cos(θ) −sin(θ) 0 0sin(θ) cos(θ) 0 00 0 1 00 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

T(d) =

1 0 0 dx

0 1 0 dy

0 0 1 dz

0 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

36

Programming in practice

Everyone uses homogeneous matrices. built into low-level software, hardware

In practice, almost never explicitly use 4th component of vector or point. Waste of memory & computation Instead, keep track of points vs. vectors explicitly• E.g. by C++ classes

Separate matrix methods “transform point” and “transform vector” that implicitly use the 1 or 0.

37

More Coordinate Equivalences

Translate an object by d Translate the coordinate frame by -d Either way, get the same coordinates out

Rotate object about the frame’s origin Rotate the frame oppositely out its own origin Either way, get the same coordinates out

Duality: Matrix transforms objects vs. changes coordinates Either can be handy (we’ll talk about next class) Can be confusing, make sure you know which you want…

38

Transformation as coordinate frame

Build matrix from vectors a, b, c, point d

Notice effect on coordinate frame:

Any transform M describes change of frame:

If a,b,c are right-handed orthonormal, transformation is rigid Pure rotation, pure translation, or mix of rotation and

translation No scale

M =

ax bx cx dx

ay by cy dy

az bz cz dz

0 0 0 1

⎢⎢⎢⎢

⎥⎥⎥⎥

ra =M

1000

⎢⎢⎢⎢

⎥⎥⎥⎥

=Mrx      

rb=M

0100

⎢⎢⎢⎢

⎥⎥⎥⎥

 =Mry      

rc=M

0010

⎢⎢⎢⎢

⎥⎥⎥⎥

=Mrz      d=M

0001

⎢⎢⎢⎢

⎥⎥⎥⎥

=M o

d,

ra,

rb,

rc =M o,

rx,

ry,

rz

39

Useful tidbit: Rotate about a “pivot”

Q: How to rotate about arbitrary pivot? Rotation matrix always rotates about origin!

A: Sequence of operations:

This is a handy “primitive” to implement Food for thought: what’s the structure of the

resulting matrix?

Given desired pivot point p, same coords give vector from origin, rv =p−o

Step 1. Translate object to move pivot point to origin: T(−rv)

Step 2. Rotate object by your rotation matrix: RStep 3. Translate to move origin back to original spot: T(

rv)

Compose these:  Rp =T(rv)RT(−

rv)

40

Next class:

Hierarchical Transformations Geometric Calculations