Geometric transformations The Pipeline Some slides are based on Shay Shalom slides from TAU Computer...

Post on 30-Dec-2015

214 views 0 download

Tags:

Transcript of Geometric transformations The Pipeline Some slides are based on Shay Shalom slides from TAU Computer...

2

How to …

Establish your position in the scene Position objects within the scene Scale objects Establish a perspective transformation Moving around in OpenGL using a camera

3

Terminology

Use Tnrasformation

Specifies the location of the viewer or camera Viewing

Moves objects around the scene Modeling

Describes the duality of viewing and modeling transformations

ModelView

Clips and sizes the viewing volume Projection

Scales the final output to the window Viewport

4

The Pipeline

5

Eye Coordinates

Viewpoint of the observer They are a virtual fixed coordinate system Used as a common frame of reference

6

Viewing Transformations

Like placing and pointing the camera at the scene To be specified before any other transformation By default, the point of observation is at the

origin, looking down the negative Z-axis.

What about objects drawn with positive Z values?

7

Modeling Transformation

Manipulate the model and the particular objects within it

Move objects into place, rotate them, and scale them

These are the most common modeling transformations

8

Modeling Transformation - the ORDER matters

Final appearance of an object depends greatly on the order of transformations

9

ModelView Duality

In fact, viewing and modeling transformations are the same

Induce the same effects on the final appearance of the scene

The distinctions is made as a convenience for the programmer

10

Projection Transformations

Applied after the modelview transformation

Defines the viewing volume and the clipping planes

Specifies how a finished scene is projected to the screen

11

Orthographic Vs. Perspective

In an Orthographic projection:‐ objects are mapped directly on the 2D screen using

parallel lines‐ No matter how far away something is

In Perspective projection:‐ Scenes are more realistic ‐ Distant objects appear smaller than nearby objects of

the same size‐ Parallel lines in 3D space do not always appear parallel

See Code Example 3

12

The Pipeline - Recall

13

Slow but steady..

Current Matrix is part of the OpenGL state Options are:

GL_MODELVIEW – changes, rotate, translate the model

GL_PROJECTION – changes, translate, rotate the camera

To specify which one is the “Current Matrix” : glMatrixMode(…)

Subsequent matrix operations affect the specified matrix One of this matrices could be change in a given time

14

Translation

void glTranslatef(GLfloat x, GLfloat y, GLfloat z )

This function takes as parameters the amount to

translate along the x, y, and z directions

15

Translation – (cont’)

glTranslate(0.0f, 10.0f, 0.0f)glutWireCube(10.0f)

Construct a translation matrix for positive 10 Y

Multiply it by the modelview matrix

16

Rotation

void glRotatef(Glfloat angle,GLfloat x, GLfloat y, GLfloat z )

This function performs a rotation around the vector specified by the x, y, and z arguments. The angle

of rotation is in the counterclockwise direction.

A rotation around an arbitrary axis could be done.

17

Scaling

void glScalef(GLfloat x, GLfloat y, GLfloat z )

Multiplies the x, y and z values by the scaling factors specified. Scaling does not

have to be uniform.

18

The Identity Matrix

Matrix operations are cumulative Erroneous artifacts may occur to the scene You reset the origin by loading the modelview

matrix with the identity matrix

glTranslate(0.0f, 10.0f, 0.0f);

glutSolidSphere(1.0f);

glTranslatef(10.0f, 0.0f, 0.0f);

glutSolidSphere(1.0f)

19

The Identity Matrix – (cont’)

glMatrixMode(GL_MODELVIEW)glLoadIdentity();

glTranslate(0.0f, 10.0f, 0.0f);

glutSolidSphere(1.0f);

glLoadIdentity();

glTranslatef(10.0f, 0.0f, 0.0f);

glutSolidSphere(1.0f)

20

Matrix stack

Resetting the modelview matrix to identity before placing the every object is not always desirable

To save the current transformation state OpenGL maintains a matrix stack for both the

modelview and projection matrices

glPushMatrix() – push the current state matrix to the stack

glPopMatrix() – pop the top matrix out of the stack, and replace the current state matrix with it

21

Matrix stack – (cont’)

See Code Example 4

22

Viewing Volume

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

23

Viewing Volume – (cont’)

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

gluPerspective(GLdouble fov ,GLdouble aspectRatio,GLdouble zNear,GLdouble zFar)

24

Camera Management

gluLookAt(GLdouble eyex, GLdouble eyey, Gldouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz)

25

Buffers

Important aspect of the current state of OpenGL Buffers dimensions are the same as the

window’s dimension Color Buffer – stores the current color for each

pixel Depth Buffer – stores the depth of each pixel of

the scene (Z-Buffer) Accumulation buffer, stencil buffer, etc’ ..

glEnable(GL_DEPTH_TEST) – enables the Z-Buffer in OpenGL. ….. Otherwise?