1 chapter 4 geometric objects and transformation

Post on 26-Dec-2015

227 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Chapter 4

Geometric Objects and Transformation

2

Objectives

Introduce the elements of geometry Scalars Vectors Points

Develop mathematical operations among them in a coordinate-free manner

Define basic primitives Line segments Polygons

3

Basic Elements Geometry is the study of the relationships among objects in

an n-dimensional space In computer graphics, we are interested in objects that exist in

three dimensions

Want a minimum set of primitives from which we can build more sophisticated objects

We will need three basic elements Scalars Vectors Points

4

Scalars Scalars can be defined as members of sets whic

h can be combined by two operations (addition and multiplication) obeying some fundamental axioms (associativity, commutivity, inverses)

Examples include the real and complex number under the ordinary rules with which we are familiar

Scalars alone have no geometric properties

5

Vectors Physical definition: a vector is a quantity

with two attributes Direction Magnitude Directed line segments

Examples include Force Velocity

DirectedLine segment

6

Vector Operations Every vector has an inverse

Same magnitude but points in opposite direction Every vector can be multiplied by a scalar There is a zero vector

Zero magnitude, undefined orientation The sum of any two vectors is a vector

Use head-to-tail axiom

v -v vv=u+w

u

w

7

Vectors Lack Position These vectors are identical

Same length and magnitude

Vectors spaces insufficient for geometry Need points

8

Points Location in space Operations allowed between points and vectors

Point-point subtraction yields a vector Equivalent to point-vector addition

P=v+Q

v=P-Q

9

Coordinate-Free Geometry

Objects and coordinate system

Objects without coordinate system

10

Linear Vector and Euclidean Spaces Mathematical system for manipulating vectors Operations

Scalar-vector multiplication u=v Vector-vector addition: w=u+v 1 • P = P 0 • P = 0 (zero vector)

Expressions such as v=u+2w-3r

Euclidean space is an extension of vector space that adds a measure of size of distance

11

Affine Spaces Point + a vector space Operations

Vector-vector addition Scalar-vector multiplication Point-vector addition Scalar-scalar operations

12

The Computer-Science View Abstract data types(ADTs) vector u, v;

point p, q;scalar a, b;

In C++, by using classes and overloading operator, we could write:q = p + a*v;

13

Geometric ADTs Textbook notations:

, , denote scalars P, Q, R define points u, v, w denote vectors

|v| = |||v|, v = P – QP = v + Q

14

Lines Consider all points of the form

P()=P0 + d

Set of all points that pass through P0 in the direction of the vector d

15

Parametric Form This form is known as the parametric form of the line

More robust and general than other forms Extends to curves and surfaces

Two-dimensional forms Explicit: y = mx +h Implicit: ax + by +c =0 Parametric:

x() = x0 + (1-)x1

y() = y0 + (1-)y1

16

Rays and Line Segments If >= 0, then P() is the ray leaving P0 in the

direction d

If we use two points to define v, then

P( ) = Q + (R-Q)=Q+v

=R + (1-)Q

For 0<=<=1 we get all the

points on the line segment

joining R and Q

17

Space Partitioning

u

vAB

C D

Ep=u+v

E: >=0, >=0, + =1F: >=0, >=0, + >1A: >=0, >=0, + <=1B: <0, >=0C: <0, <0D: >=0, <0

F

18

Convexity An object is convex iff for any two points i

n the object all points on the line segment between these points are also in the object

P

QQ

P

19

Affine Sums Consider the “sum”

P=1P1+2P2+…..+nPn

Can show by induction that this sum makes sense iff

1+2+…..n=1

in which case we have the affine sum of the points P1P2,…..Pn

If, in addition, i>=0, we have the convex hull of P

1P2,…..Pn

20

Convex Hull

Smallest convex object containing P1P2,…..Pn

Formed by “shrink wrapping” points

21

Dot and Cross: Products

||||

|||sin|

||||cos

||

),,(

),,(),,,(

2

vu

vu

vu

vu

uuu

vuvuvuvuvuvuvu

vuvuvuvu

vvvvuuuuLet

xyyxzxxzyzzy

zzyyxx

zyxzyx

22

Linear Independence A set of vectors v1, v2, …, vn is linearly inde

pendent if

v1+v2+..vn=0 iff 1=2=…=0

If a set of vectors is linearly independent, we cannot represent one in terms of the others

If a set of vectors is linearly dependent, as least one can be written in terms of the others

23

Dimension In a vector space, the maximum number of linearly i

ndependent vectors is fixed and is called the dimension of the space

In an n-dimensional space, any set of n linearly independent vectors form a basis for the space

Given a basis v1, v2,…., vn, any vector v can be written as

v=1v1+ 2v2 +….+nvn

where the {i} are unique

24

Planes and Normals Every plane has a vector n normal (perpendicular, orthogon

al) to it From point-two vector form P(,)=R+u+v, we know we

can use the cross product to find n = u v and the equivalent form

(P()-P) n=0 Assume P=(x0, y0, z0) and

n=(nx, ny, nz), then the plane equation=nxx+nyy+nzz=nx0+ny0+nz0

25

Three-Dimensional Primitives Hollow objects Objects can be specified by vertices Simple and flat polygons (triangles) Constructive Solid Geometry (CSG)

3D curves 3D surfaces Volumetric Objects

26

Constructive Solid Geometry

27

Representation Until now we have been able to work with

geometric entities without using any frame of reference, such a coordinate system

Need a frame of reference to relate points and objects to our physical world. For example, where is a point? Can’t answer

without a reference system World coordinates Camera coordinates

28

Coordinate Systems Consider a basis v1, v2,…., vn

A vector is written v=1v1+ 2v2 +….+nvn

The list of scalars {1, 2, …. n}is the representation of v with respect to the given basis

We can write the representation as a row or column array of scalars

a=[1 2 …. n]T=

n

2

1

.

29

Example v=2v1+3v2-4v3

a=[2 3 –4] Note that this representation is with respect

to a particular basis For example, in OpenGL we start by

representing vectors using the world basis but later the system needs a representation in terms of the camera or eye basis

30

Problem in Coordinate Systems Which is correct?

Both are because vectors have no fixed location

v

v

31

Frames – 1/2 Coordinate System is insufficient to present poin

ts If we work in an affine space we can add a singl

e point, the origin, to the basis vectors to form a frame

32

Frames – 2/2 Frame determined by (P0, v1, v2, v3)

Within this frame, every vector can be written as

v=1v1+ 2v2 +….+nvn

Every point can be written as

P = P0 + 1v1+ 2v2 +….+nvn

33

Representations and N-tuples

),,(

)1,0,0(

)0,1,0(

)0,0,1(

) (

321

3

2

1

321

332211

adenote

e

e

e

kjivor

eeev

T

T

T

34

Change of Coordinate Systems Consider two representations of a the same

vector with respect to two different bases. The representations are

v=1v1+ 2v2 +3v3 = [1 2 3] [v1 v2 v3]

T

=1u1+ 2u2 +3u3 = [1 2 3] [u1 u2 u3]

T

a=[1 2 3 ]

b=[1 2 3]where

35

Representing Second Basis in terms of the First

Each of the basis vectors, u1,u2, u3, are vectors that can be represented in terms of the first basis

u1 = 11v1+12v2+13v3

u2 = 21v1+22v2+23v3

u3 = 31v1+32v2+33v3

v

36

Matrix FormThe coefficients define a 3 x 3 matrix

and the basis can be related by

see text for numerical examples

33

M =

a=MTb b=(MT)-1a

37

Confusing Points and VectorsConsider the point and the vector

P = P0 + 1v1+ 2v2 +….+nvn

v=1v1+ 2v2 +….+nvn

They appear to have the similar representations

P=[1 2 3] v=[1 2 3]

which confuse the point with the vector

A vector has no positionv

pv

can place anywherefixed

38

A Single RepresentationIf we define 0•P = 0 and 1•P =P then we can write

v=1v1+ 2v2 +3v3 = [1 2 3 0 ] [v1 v2 v3 P0] T

P = P0 + 1v1+ 2v2 +3v3= [1 2 3 1 ] [v1 v2 v3 P0] T

Thus we obtain the four-dimensional homogeneous coordinate representation

v = [1 2 3 0 ] T

P = [1 2 3 1 ] T

39

Homogeneous CoordinatesThe general form of four dimensional homogeneous coordinates is

p=[x y x w] T

We return to a three dimensional point (for w0) by

xx/w

yy/w

zz/w

If w=0, the representation is that of a vector

Note that homogeneous coordinates replaces points in three dimensions by lines through the origin in four dimensions

40

Homogeneous Coordinates and Computer Graphics

Homogeneous coordinates are key to all computer graphics systems All standard transformations (rotation, translation, scaling)

can be implemented by matrix multiplications with 4 x 4 matrices

Hardware pipeline works with 4 dimensional representations

For orthographic viewing, we can maintain w=0 for vectors and w=1 for points

For perspective we need a perspective division

41

Change of Frames We can apply a similar process in

homogeneous coordinates to the representations of both points and vectors

Consider two frames

Any point or vector can be represented in each

P0 v1

v2

v3

Q0

u1u2

u3

42

Representing One Frame in Terms of the Other

Extending what we did with change of bases

u1 = 11v1+12v2+13v3

u2 = 21v1+22v2+23v3

u3 = 31v1+32v2+33v3

Q0 = 41v1+42v2+43v3 +44P0

using a 4 x 4 matrix:

M =

43

Working with RepresentationsWithin the two frames any point or vector has a rep

resentation of the same forma=[1 2 3 4 ] in the first frameb=[1 2 3 4 ] in the second frame

where 4 4 for points and 4 4 for vectors and

The matrix M is 4 x 4 and specifies an affine transformation in homogeneous coordinates

a=MTb

44

Frames and ADTs – 1/3point3 p, q;vector3 v, u;In C++, through overloading,q=p+v;u=p-q;are valid, butq=v;u=p+q;are not!

45

Frames and ADTs – 2/3typedef float point3[4];

typedef float point2[4]; /* making a 2D point a special 3D point */

How do we initialize a point?

p={1.0, 2.0, 3.0};

/* implementation dependent! */

46

Frames and ADTs – 3/3Solutions:

1. initialize a point through a function:p = new_point3(1.0, 2.0, 3.0);

2. All operations are done through functions:point3 p, q;vector3 v; /* frame f; */v = point_sub(p, q);/* v = point_sub(p, q, f); */

47

Frames in OpenGL When we work with representations, we work with

n-tuples or arrays of scalars Changes in frame are then defined by 4 x 4 matrices In OpenGL, the base frame that we start with is the

world frame Eventually we represent entities in the camera frame

by changing the world representation using the model-view matrix

Initially these frames are the same (M=I)

48

Positioning the World Frame – 1/2If objects are on both sides of z=0, we should move

the world frame

1000

d100

0010

0001

M =

49

Positioning the World Frame – 2/2

50

Modeling of a Colored Cube Modeling Converting to the camera frame Clipping Projecting Removing hidden surfaces Rasterizing

Demo

51

Objectives Introduce simple data structures for

building polygonal models Vertex lists Edge lists

OpenGL vertex arrays

52

Representing a Mesh Consider a mesh

There are 8 nodes and 12 edges 5 interior polygons 6 interior (shared) edges

Each vertex has a location vi = (xi yi zi)

v1 v2

v7

v6

v8

v5

v4

v3

e1

e8

e3

e2

e11

e6

e7

e10

e5

e4

e9

e12

53

Simple Representation List all polygons by their geometric locations Leads to OpenGL code such as

Inefficient and unstructured Consider moving a vertex to a new locations

glBegin(GL_POLYGON); glVertex3f(x1, x1, x1); glVertex3f(x6, x6, x6); glVertex3f(x7, x7, x7);glEnd();

54

Modeling of a Cubetypedef GLfloat point3[3];point3 vertices[8][3] = {-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},{1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0}, {1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};

glBegin(GL_POLYGON);glVertex3fv(vertices[0]);glVertex3fv(vertices[3]);glVertex3fv(vertices[2]);glVertex3fv(vertices[1]);

glEnd();

OpenGL: glVertex3f 4D form

55

Inward and Outward Facing Polygons

The order {v0, v3, v2, v1} and {v1, v0, v3, v2} are equivalent in that the same polygon will be rendered by OpenGL but the order {{v0, v1, v2, v3} is different

The first two describe outwardly

facing polygons Use the right-hand rule =

counter-clockwise encirclement

of outward-pointing normal OpenGL treats inward and

outward facing polygons differently

56

Geometry versus Topology Generally it is a good idea to look for data

structures that separate the geometry from the topology Geometry: locations of the vertices Topology: organization of the vertices and edges Example: a polygon is an ordered list of vertices with

an edge connecting successive pairs of vertices and the last to the first

Topology holds even if geometry changes

57

Vertex Lists Put the geometry in an array Use pointers from the vertices into this array Introduce a polygon list

Each location appears only once!

,z0

58

The Color Cube – 1/3Model a color cube for rotating cube programDefine global arrays for vertices and colors

typedef GLfloat point3[3];point3 vertices[8][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},{1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},{1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};GLfloat colors[8][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0},{1.0,1.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0},{1.0,0.0,1.0}, {1.0,1.0,1.0}, {0.0,1.0,1.0}};

59

The Color Cube – 2/3void quad(int a, int b, int c , int d){ glBegin(GL_POLYGON); glColor3fv(colors[a]); glVertex3fv(vertices[a]); glColor3fv(colors[b]); glVertex3fv(vertices[b]); glColor3fv(colors[c]); glVertex3fv(vertices[c]); glColor3fv(colors[d]); glVertex3fv(vertices[d]); glEnd(); } Color each vertex accordingly

60

The Color Cube – 3/3void colorcube( ){ polygon(0,3,2,1); polygon(2,3,7,6); polygon(0,4,7,3); polygon(1,2,6,5); polygon(4,5,6,7); polygon(0,1,5,4);}

Note that vertices are ordered so that we obtain correct outward facing normals

0

5 6

2

4 7

1

3

61

Bilinear Interpolation

5445

3223

1001

)1()(

,)1()(

,)1()(

CCC

CCC

CCC

Assuming a linear variation, then we can make use of the same interpolation coefficients in coordinates for the interpolation of other attributes.

62

Scan-line Interpolation A polygon is filled only when it is displayed It is filled scan line by scan line Can be used for other associated attributes

with each vertex

63

Efficiency The weakness of our approach is that we are buil

ding the model in the application and must do many function calls to draw the cube

Drawing a cube by its faces in the most straight forward way requires 6 glBegin, 6 glEnd 6 glColor 24 glVertex More if we use texture and lighting

64

Vertex Arrays OpenGL provides a facility called vertex arrays that allow u

s to store array data in the implementation Six types of arrays supported

Vertices Colors Color indices Normals Texture coordinates Edge flags

We will need only colors and vertices

65

Initialization Using the same color and vertex data, first we enable

glEnableClientState(GL_COLOR_ARRAY);

glEnableClientState(GL_VERTEX_ARRAY); Identify location of arrays

glVertexPointer(3, GL_FLOAT, 0, vertices);

glColorPointer(3, GL_FLOAT, 0, colors);

3d arrays stored as floats data contiguous

data array

66

Mapping Indices to Faces Form an array of face indices

Each successive four indices describe a face of the cube

Draw through glDrawElements which replaces all glVertex and glColor calls in the display callback

GLubyte cubeIndices[24] = {0,3,2,1,2,3,7,6 0,4,7,3,1,2,6,5,4,5,6,7,0,1,5,4};

67

Drawing the Cube Method 1:

Method 2:

for(i=0; i<6; i++) glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_BYTE, &cubeIndices[4*i]);

format of index data start of index data

what to draw number of indices

glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubeIndices);

Draws cube with 1 function call!!

68

General Transformations A transformation maps points to other

points and/or vectors to other vectors

69

Linear Function (Transformation)

)()()(

, and ,,

QfPfQPf

RQPR n

100034333231

24232221

14131211

A

Transformation matrix for homogeneous coordinate system:

AdAPAPdPP 00 )( ,)(

70

Affine Transformations – 1/2 Line preserving Characteristic of many physically important

transformations Rigid body transformations: rotation, translation Scaling, shear

Importance in graphics is that we need only transform endpoints of line segments and let implementation draw line segment between the transformed endpoints

71

Affine Transformations – 2/2

Every linear transformation (if the corresponding matrix is nonsingular) is equivalent to a change in frames

However, an affine transformation has only 12 degrees of freedom because 4 of the elements in the matrix are fixed and are a subset of all possible 4 x 4 linear transformations

72

Translation Move (translate, displace) a point to a new

location

Displacement determined by a vector d Three degrees of freedom P’=P+d

P

d

73

How Many Ways?Although we can move a point to a new location in

infinite ways, when we move many points there is usually only one way

object translation: every point displaced by same vector

74

Rotation (2D) – 1/2 Consider rotation about the origin by degrees

radius stays the same, angle increases by

x´ =x cos –y sin y´ = x sin + y cos

x = r cos y = r sin

x´ = r cos (rcoscosrsinsiny´ = r sin (rcossinrsincos

75

Rotation (2D) – 2/2 Using the matrix form:

There is a fixed point Could be extended to 3D Positive direction of rotation is counterclockwise 2D rotation is equivalent to 3D rotation about the

z-axis

y

x

y

x

cossin

sincos

76

(Non-)Rigid-Body Transformation Translation and rotation are rigid-body

transformation

Non-rigid-bodytransformations

77

ScalingExpand or contract along each axis (fixed point of origin)

x´=sxxy´=syxz´=szx

Uniform and non-uniform scaling

78

Reflectioncorresponds to negative scale factors

originalsx = -1 sy = 1

sx = -1 sy = -1 sx = 1 sy = -1

79

Transformation in Homogeneous Coordinates

With a frame, each affine transformation is represented by a 44 matrix of the form:

100034333231

24232221

14131211

M

80

TranslationUsing the homogeneous coordinate representation in some fra

me

p=[ x y z 1]T

p´=[x´ y´ z´ 1]T

d=[dx dy dz 0]T

Hence p´= p + d or

x´=x+dx

y´=y+dy

z´=z+dznote that this expression is in four dimensions and expressesthat point = vector + point

81

Translation MatrixWe can also express translation using a 4 x 4 matrix T in homogeneous coordinatesp´=Tp where

This form is better for implementation because all affine transformations can be expressed this way and multiple transformations can be concatenated together

1000

d100

d010

d001

),,(z

y

x

zyx dddTT

82

Rotation about the Z axis Rotation about z axis in three dimensions leaves all po

ints with the same z Equivalent to rotation in two dimensions in planes

of constant z

or in homogeneous coordinates

p’=Rz()p

x´=x cos –y sin y´= x sin + y cos z´=z

83

Rotation Matrix

1000

0100

00 cossin

00sin cos

)(zRR

84

Rotation about X and Y axes Same argument as for rotation about z axis

For rotation about x axis, x is unchanged For rotation about y axis, y is unchanged

1000

0 cossin 0

0sin - cos0

0001

(xRR

1000

0 cos0sin -

0010

0sin 0 cos

(yRR

85

Scaling Matrixx´=sxxy´=syxz´=szx

p´=Sp

1000

000

000

000

),,(z

y

x

zyx s

s

s

sssSS

86

Shear Helpful to add one more basic transformation Equivalent to pulling faces in opposite directions

87

Shear Matrix

Consider simple shear

along x axis

x’ = x + y cot y’ = yz’ = z

1000

0100

0010

00cot 1

(H

88

Inverses

Although we could compute inverse matrices by general formulas, we can use simple geometric observations Translation: T-1(dx, dy, dz) = T(-dx, -dy, -dz)

Rotation: R -1() = R(-) Holds for any rotation matrix Note that since cos(-) = cos() and sin(-)=-sin()

R -1() = R T()

Scaling: S-1(sx, sy, sz) = S(1/sx, 1/sy, 1/sz)

89

Concatenation We can form arbitrary affine transformation matrice

s by multiplying together rotation, translation, and scaling matrices

Because the same transformation is applied to many vertices, the cost of forming a matrix M=ABCD is not significant compared to the cost of computing Mp for many vertices p

The difficult part is how to form a desired transformation from the specifications in the application

90

Order of Transformations Note that matrix on the right is the first applie

d Mathematically, the following are equivalent

p´ = ABCp = A(B(Cp)) Note many references use column matrices to

present points. In terms of column matrices

p´T = pTCTBTAT

91

Rotation about a Fixed Point and about the Z axis

f

)()()( fzf pTRpTM

92

Sequence of Transformations

93

General Rotation about the Origin

A rotation by q about an arbitrary axis can be decomposed into the concatenation of rotations about the x, y, and z axes

R() = Rx() Ry() Rz()

are called the Euler angles

Note that rotations do not commute

We can use rotations in another order but

with different angles

x

z

yv

94

Decomposition of General Rotation

95

The Instance Transformation In modeling, we often start

with a simple object centered at the origin, oriented with the axis, and at a standard size

We apply an instance transformation to its vertices to

Scale

Orient

Locate Display lists

96

Rotation about an Arbitrary Axis – 1/3

1. Move the fixed point to the origin

2. Rotate through a sequence of rotations

97

Rotation about an Arbitrary Axis – 2/3

1coscoscos ,cos,cos,cos

1 ,||

222

222

zyxzzyyxx

zyx

z

y

x

u

uv

Normalize u:

Final rotation matrix:

)()()()()( xxyyzyyxx RRRRRR

98

Rotation about an Arbitrary Axis – 3/3

Rotate the line segment to the plane of y=0, and the line segment is foreshortened to:

1000

0//0

0//0

0001

)(

so ,22

dd

ddR

d

zy

yzxx

zy

Rotate clockwise about the y-axis, so:

1000

00

0010

00

)(d

d

Rx

x

yy

)()()()()()()( 00 PTRRRRRPTR xxyyzyyxx Final transformation matrix:

99

OpenGL Matrices In OpenGL matrices are part of the state Three types

Model-View (GL_MODEL_VIEW) Projection (GL_PROJECTION) Texture (GL_TEXTURE) (ignore for now)

Single set of functions for manipulation Select which to manipulated by

glMatrixMode(GL_MODEL_VIEW); glMatrixMode(GL_PROJECTION);

100

Current Transformation Matrix (CTM) Conceptually there is a 4 x 4 homogeneous

coordinate matrix, the current transformation matrix (CTM) that is part of the state and is applied to all vertices that pass down the pipeline

The CTM is defined in the user program and loaded into a transformation unit

CTMvertices vertices

p p´=CpC

101

CTM Operations The CTM can be altered either by loading a new

CTM or by postmutiplicationLoad an identity matrix: C ILoad an arbitrary matrix: C M

Load a translation matrix: C TLoad a rotation matrix: C RLoad a scaling matrix: C S

Postmultiply by an arbitrary matrix: C CMPostmultiply by a translation matrix: C CTPostmultiply by a rotation matrix: C C RPostmultiply by a scaling matrix: C C S

102

Rotation about a Fixed PointStart with identity matrix: C IMove fixed point to origin: C CT -1

Rotate: C CRMove fixed point back: C CT

Result: C = T -1RT

Each operation corresponds to one function call in the program.

Note that the last operation specified is the first executed in the program

103

CTM in OpenGL OpenGL has a model-view and a

projection matrix in the pipeline which are concatenated together to form the CTM

Can manipulate each by first setting the matrix mode

104

Rotation, Translation, Scaling

glRotatef(theta, vx, vy, vz);

glTranslatef(dx, dy, dz);

glScalef( sx, sy, sz);

glLoadIdentity();

Load an identity matrix:

Multiply on right:

theta in degrees, (vx, vy, vz) define axis of rotation

Each has a float (f) and double (d) format (glScaled)

105

Example Rotation about z axis by 30 degrees with a fixed

point of (1.0, 2.0, 3.0)

Remember that last matrix specified in the program is the first applied

glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(1.0, 2.0, 3.0);glRotatef(30.0, 0.0, 0.0, .10);glTranslatef(-1.0, -2.0, -3.0);

106

Using Transformations Example: use idle function to rotate a cube and

mouse function to change direction of rotation Start with a program that draws a cube (cube.c)

in a standard way Centered at origin Sides aligned with axes Discussed modeling previously

107

main.cvoid main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLU

T_RGB | GLUT_DEPTH); glutInitWindowSize(500, 500); glutCreateWindow("cube"); glutReshapeFunc(myReshape); glutDisplayFunc(display); glutIdleFunc(spinCube); glutMouseFunc(mouse); glEnable(GL_DEPTH_TEST); glutMainLoop();}

108

Idle and Mouse Callbacksvoid spinCube() {

theta[axis] += 2.0;if( theta[axis] > 360.0 ) theta[axis] -= 360.0;glutPostRedisplay();

}void mouse(int btn, int state, int x, int y){ if(btn==GLUT_LEFT_BUTTON && state == GLUT_DOWN) axis = 0; if(btn==GLUT_MIDDLE_BUTTON && state == GLUT_DOWN) axis = 1; if(btn==GLUT_RIGHT_BUTTON && state == GLUT_DOWN) axis = 2;}

109

Display Callbackvoid display(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER

_BIT); glLoadIdentity(); glRotatef(theta[0], 1.0, 0.0, 0.0); glRotatef(theta[1], 0.0, 1.0, 0.0); glRotatef(theta[2], 0.0, 0.0, 1.0); colorcube(); glutSwapBuffers();}Note that because of fixed from of callbacks, variables such as theta and axis must be defined as globals

Camera information is in standard reshape callback

110

Arbitrary Matrices Can load and multiply by matrices defined in the a

pplication program

The matrix m is a one dimension array of 16 elements which are the components of the desired 4 x 4 matrix stored by columns

In glMultMatrixf, m multiplies the existing matrix on the right

glLoadMatrixf(m)glMultMatrixf(m)

111

Matrix Stacks In many situations we want to save transformatio

n matrices for use later Traversing hierarchical data structures (Chapter 9) Avoiding state changes when executing display lists

OpenGL maintains stacks for each type of matrix Access present type (as set by glMatrixMode) b

yglPushMatrix();glPopMatrix();

112

Reading Back Matrices Can also access matrices (and other parts of the

state) by enquiry (query) functions

For matrices, we use as

glGetIntegervglGetFloatvglGetBooleanvglGetDoublevglIsEnabled

double m[16];glGetFloatv(GL_MODELVIEW, m);

113

Using the Model-View Matrix In OpenGL the model-view matrix is used to

Position the camera Can be done by rotations and translations but is often easier to use gluLookAt (Chapter 5)

Build models of obejcts The projection matrix is used to define the view volume and to select a c

amera lens Although both are manipulated by the same functions, we have to be care

ful because incremental changes are always made by postmultiplication For example, rotating model-view and projection matrices by the same mat

rix are not equivalent operations. Postmultiplication of the model-view matrix is equivalent to premultiplication of the projection matrix

114

Interfaces to 3D Applications One of the major problems in interactive computer grap

hics is how to use two-dimensional devices such as a mouse to interface with three dimensional objects

Example: how to form an instance matrix? Some alternatives

Virtual trackball 3D input devices such as the spaceball Use areas of the screen

Distance from center controls angle, position, scale depending on mouse button depressed

115

Using Areas of the Screen Each button controls rotation, scaling and

translation, separately Example:

Left button: closer to the center, no rotation, moving up or down, rotate about x-axis, moving left or right, rotate about y-axis, moving to the corner, rotate about x-y-axes

Right button: translation Middle button: scaling (zoom-in or zoom-out)

116

Physical Trackball The trackball is an “upside down” mouse

If there is little friction between the ball and the rollers, we can give the ball a push and it will keep rolling yielding continuous changes

Two possible modes of operation Continuous pushing or tracking hand motion Spinning

117

A Trackball from a Mouse Problem: we want to get the two behavior

modes from a mouse We would also like the mouse to emulate a

frictionless (ideal) trackball Solve in two steps

Map trackball position to mouse position Use GLUT to obtain the proper modes

118

Trackball Frame

origin at center of ball

119

Projection of Trackball Position We can relate position on trackball to positi

on on a normalized mouse pad by projecting orthogonally onto pad

120

Reversing Projection Because both the pad and the upper

hemisphere of the ball are two-dimensional surfaces, we can reverse the projection

A point (x,z) on the mouse pad corresponds to the point (x,y,z) on the upper hemisphere where

y =222 zxr if r |x| 0, r |z| 0

121

Computing Rotatoins Suppose that we have two points that were

obtained from the mouse. We can project them up to the hemisphere to

points p1 and p2

These points determine a great circle on the sphere We can rotate from p1 to p

by finding the proper axis of rotation and the angle between the points

122

Using the Cross Product The axis of rotation is given by the normal

to the plane determined by the origin, p1 , and p2

n = p1 p1

123

Obtaining the Angle The angle between p1 and p2 is given by

If we move the mouse slowly or sample its position frequently, then will be small and we can use the approximation

| sin | = ||||

||

21 pp

n

sin

124

Implementing with GLUT We will use the idle, motion, and mouse callbac

ks to implement the virtual trackball Define actions in terms of three booleans trackingMouse: if true update trackball positi

on redrawContinue: if true, idle function posts a

redisplay trackballMove: if true, update rotation matrix

125

Example In this example, we use the virtual trackball

to rotate the color cube we modeled earlier The code for the colorcube function is omit

ted because it is unchanged from the earlier examples

126

Initialization#define bool int /* if system does not support bool type */#define false 0#define true 1#define M_PI 3.14159 /* if not in math.h */

int winWidth, winHeight;

float angle = 0.0, axis[3], trans[3];

bool trackingMouse = false;bool redrawContinue = false;bool trackballMove = false;

float lastPos[3] = {0.0, 0.0, 0.0};int curx, cury;int startX, startY;

127

The Projection Stepvoidtrackball_ptov(int x, int y, int width, int height, float v[3]){ float d, a; /* project x,y onto a hemisphere centered within width, height , note

z is up here*/ v[0] = (2.0F*x - width) / width; v[1] = (height - 2.0F*y) / height; d = sqrt(v[0]*v[0] + v[1]*v[1]); v[2]=sqrt(1.0F-d*d); /* v[2] = cos((M_PI/2.0) * ((d < 1.0) ? d : 1.0)); a = 1.0 / sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]); v[0] *= a; v[1] *= a; v[2] *= a; */}

128

glutMotionFunc – 1/2void mouseMotion(int x, int y){ float curPos[3], dx, dy, dz; /* compute position on hemisphere */ trackball_ptov(x, y, winWidth, winHeight, curP

os); if(trackingMouse) { /* compute the change in position on the hemisphere */ dx = curPos[0] - lastPos[0]; dy = curPos[1] - lastPos[1]; dz = curPos[2] - lastPos[2];

129

glutMotionFunc – 2/2if (dx || dy || dz) { /* compute theta and cross product */ angle = 90.0 * sqrt(dx*dx + dy*dy + dz*dz); axis[0] = lastPos[1]*curPos[2] – lastPos[2]*curPos[1]; axis[1] = lastPos[2]*curPos[0] – lastPos[0]*curPos[2]; axis[2] = lastPos[0]*curPos[1] – lastPos[1]*curPos[0]; /* update position */ lastPos[0] = curPos[0]; lastPos[1] = curPos[1]; lastPos[2] = curPos[2]; } } glutPostRedisplay();}

130

Idle and Display Callbacksvoid spinCube(){ if (redrawContinue) glutPostRedisplay();}

void display(){ glClear(GL_COLOR_BUFFER_BIT|

GL_DEPTH_BUFFER_BIT); if (trackballMove) {

glRotatef(angle, axis[0], axis[1], axis[2]); }

colorcube(); glutSwapBuffers();}

131

Mouse Callbackvoid mouseButton(int button, int state, int x, int y){

if(button==GLUT_RIGHT_BUTTON) exit(0);

/* holding down left button allows user to rotate cube */

if(button==GLUT_LEFT_BUTTON) switch(state) { case GLUT_DOWN:

y=winHeight-y; startMotion( x,y); break;

case GLUT_UP: stopMotion( x,y); break;

} }

132

Start Functionvoid startMotion(int x, int y){ trackingMouse = true; redrawContinue = false; startX = x; startY = y; curx = x; cury = y; trackball_ptov(x, y, winWidth, winHeight,

lastPos); trackballMove=true;}

133

Stop Functionvoid stopMotion(int x, int y){ trackingMouse = false; /* check if position has changed */ if (startX != x || startY != y)

redrawContinue = true; else {

angle = 0.0; redrawContinue = false; trackballMove = false;

}}

134

Smooth Rotation – 1/2 From a practical standpoint, we are often want to use tran

sformations to move and reorient an object smoothly Problem: find a sequence of model-view matrices M0,M1,…..,

Mn so that when they are applied successively to one or more objects we see a smooth transition, cannot always decompose a rotation into three rotations about the x, y, and z axes

For orientating an object, we can use the fact that every rotation corresponds to part of a great circle on a sphere Find the axis of rotation and angle Virtual trackball

135

Smooth Rotation – 2/2 Observe that for arbitrary rotation matrix R,

there must exist a direction d such that all the points on Rp=p, and Rd=d, therefore the vector d and the column matrix p are eigen vectors of the matrix R corresponding to the eigen value 1!

136

Incremental Rotation – 1/4 Consider the two approaches

For a sequence of rotation matrices R0,R1,…..,R

n , find the Euler angles for each and use Ri= Riz

Riy Rix

Not very efficient

Use the final positions to determine the axis and angle of rotation, then increment only the angle

Quaternions can be more efficient than either

137

Incremental Rotation – 2/4for(i=0; i< imax; i++)

{

glRotatef(delta_theta, dx, dy, dz);

draw_objects();

}

Problem: calculation of sin and cos of angles

138

Incremental Rotation – 3/4A better solution is to reuse the matrix:

GLfloat m[16];

glRotatef(delta_theta, dx, dy, dz);

glGetFloatv(GL_MODELVIEW,m);

for(i=0; i< imax; i++)

{

glMultMatrixf(m);

draw_objects();

}

139

Incremental Rotation – 4/4Further improvement by approximations:

1cos ,sin So, if we form an arbitrary rotation matrix through the Euler angles:

1000

01

01

01

1000

0cossin0

0sincos0

0001

1000

0cos0sin

0010

0sin0cos

1000

0100

00cossin

00sincos

)()()(

xyz RRRR

140

Complex Numbers

Euler’s identity

sincos iei For an arbitrary complex number c:

abbar

reibac i

/tan and ,

where,

122

If we rotate c about the origin by to c´:

)( irec

141

Quaternions Extension of imaginary numbers from two to three dimen

sions Requires one real and three imaginary components i, j, k

Quaternions can express rotations on sphere smoothly and efficiently. Process: Model-view matrix quaternion Carry out operations with quaternions Quaternion Model-view matrix

q=q0+q1i+q2j+q3k

142

Quaternions Properties

),(||

1

therefore),0,1( is quaternionfor identity tiveMultiplica

as || norm Define

)(

),(

:define then),,(If

),(),,,(Let

021

20

23

22

21

20

2

0000

00

0

3210

03210

q

qq

pqqppq

pq

p

ijkkjikjiq

q222

qa

a

qqqqq

a

p,qpqab

,pqba

p b

qqqq

qqqqqa

-1 where,

143

Quaternions and Rotation

)(sin))((cos)(

))((2

sin)(2

cos2

sin2)(2

sin2

cos

where),,0(

form thehas quaternion this then,

: with quaternion the

ofproduct quaternion heConsider t

)2

sin,2

(cos

thereforeand ),1||( quartenionunit a is so

length,unit a has where),2

sin,2

(cos

quaternion heConsider t

),,(

wherespace, inpoint a represent to),0( Use

222

1

1

pvvpvpvpv

vpvpvvpvpp

p

v

vv

p

p

rprp

rp

r

rr

r

zyx

p

144

Example of using Quaternion Rotation

)cossin,sincos(

where),,0(),0(

quaternion theyields

),,(point arbitrary an of rotation The

)1,0,0(2

sin2

cos

let axis, z about the rotation get the To

11

yxyx

rprrprp

zyx

r

p

p

p

145

Quaternions and Rotation Matrix

1000

0)1(cossin)cos1(sin)cos1(

0sin)cos1()1(cossin)cos1(

0sin)cos1(sin)cos1()1(cos

:get could weresult, rotation quaternion the with

compare and ),2

sin,2

(cos Let .quaternionby done be could

)()()()()(

only )()()()()()()(For

22

22

22

00

zzxzyyxz

xzyyyzyx

yxzzyxxx

xxyyzyyxx

xxyyzyyxx

vvvvvvvv

vvvvvvvv

vvvvvvvv

R

z

y

x

R

r

RRRRRR

pTRRRRRpTM

v

146

The Rotation Matrix in the Textbook

1

and ,2

sin2

cos2sin

,2

sin212

sin2

coscos

:identities tric trigonomefollowing theuse youif

slide, previous thein as same thesIt'

222

222

zyx vvv

147

Quaternions Because the rotations are on the surface of

a sphere, quaternions provide an interesting and more efficient way to implement the trackball

See code in some of the standard demos included with Mesa

top related