View
6
Download
0
Category
Preview:
Citation preview
Transformation Pipeline
Local (Object) Modeling W ld SLocal (Object)Space
Modelingtransformation
World Space
ViewingtransformationEye SpaceClip Space Projection
transformation
Perspectivedivide NDC space Viewport
mapping Screen spacel d dNormalized Device Coordinates
Coordinate system
A coordinate system is used to unambiguously represent a pointunambiguously represent a point
It contains a reference point (the origin) and three linearly independent vectorsand three linearly independent vectors (the basis)
v3
v1
v2
O
Screen Coordinate System
Glut
(0 0)OpenGL(0,0)
Screen Coordinate System
- 2D Regular Cartesian Grid- Origin (0,0) at lower leftOrigin (0,0) at lower left
corner (OpenGL convention)- Horizontal axis – x
Vertical axis yVertical axis – y - Pixels are defined at the grid
intersections (0,0)
y
- This coordinate system is defined relative to the display window origin(OpenGL: the lower left corner
x
(Ope G t e o e e t co eof the window) (2,2)
Local Coordinate System
Screen coordinate system is not very useful for displaying 3D objectsp y g j
You also do not necessarily know where the object is going to be placed in the end in the 3D world
Solution: define the positions of the vertices relative to its own center – Local coordinate system
yzyz
x x
Simple OpenGL code
void display() { glClearColor(0,0,1,1);
OpenGL 1.1 convention, the goal here is to show you the idea
float vertices[] = {-0.5, -0.5, 0.0, 1.0, // first triangle-0.5, 0.5, 0.0, 1.0, 0 5 0 5 0 0 1 0g ( , , , );
glClear(GL_COLOR_BUFFER_BIT); glColor4f(1,1,0,1); //glColor* have been deprecated in OpenGL 3
glBegin(GL_TRIANGLES); //glBegin/End have been deprecated in OpenGL 3lC l 4f(1 1 0 1)
0.5, 0.5, 0.0, 1.0, 0.5, 0.5, 0.0, 1.0, // second triangle 0.5, -0.5, 0.0, 1.0, -0.5, -0.5, 0.0, 1.0};
glColor4f(1,1,0,1); glVertex4f(vertices[0], vertices[1], vertices[2], vertices[3]); glVertex4f(vertices[4], vertices[5], vertices[6], vertices[7]); glVertex4f(vertices[8], vertices[9], vertices[10], vertices[11]); glColor4f(1,0,0,1);glColor4f(1,0,0,1); glVertex4f(vertices[12], vertices[13], vertices[14], vertices[15]); glVertex4f(vertices[16], vertices[17], vertices[18], vertices[19]); glVertex4f(vertices[20], vertices[21], vertices[22], vertices[23]); glEnd();
glutSwapBuffers(); }
World Coordinate System
Local coordinates along do not allow you to specify where the object will be placed position, size, orientation
Transformations need to be performed to position the object in the world coordinate systemobject in the world coordinate system
This is done through an arbitrary number of affine transformations (translation, rotation, scaling) applied to each vertex
=or =or
Modeling Transformation
The transformation from local to world coordinates The matrix used is called modelingg
transformation matrix A modeling transformation is a sequence of
translations, rotations, scalings (in arbitrary order) matrices multiplied togethermatrices multiplied together
More detail to come in the next lecture
Transformation Pipeline
Local (Object) Modeling W ld SLocal (Object)Space
Modelingtransformation
World Space
ViewingtransformationEye SpaceClip Space Projection
transformation
Perspectivedivide NDC space Viewport
mapping Screen spacel d dNormalized Device Coordinates
Simple OpenGL code
void display() {
glClearColor(0,0,1,1);
OpenGL 1.1 convention, the goal here is to show you the idea
float vertices[] = {-0.5, -0.5, 0.0, 1.0, // first triangle-0.5, 0.5, 0.0, 1.0, 0 5 0 5 0 0 1 0glClear(GL_COLOR_BUFFER_BIT);
glColor4f(1,1,0,1); //glColor* have been deprecated in OpenGL 3
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
0.5, 0.5, 0.0, 1.0, 0.5, 0.5, 0.0, 1.0, // second triangle 0.5, -0.5, 0.0, 1.0, -0.5, -0.5, 0.0, 1.0};
More detail about what happens behind the scene glRotatef(45, 0,0,1);
glBegin(GL_TRIANGLES); //glBegin/End have been deprecated in OpenGL 3glColor4f(1,1,0,1); glVertex4f(vertices[0], vertices[1], vertices[2], vertices[3]); glVe te 4f( e ti e [4] e ti e [5] e ti e [6] e ti e [7])
will be explained
glVertex4f(vertices[4], vertices[5], vertices[6], vertices[7]); glVertex4f(vertices[8], vertices[9], vertices[10], vertices[11]); glColor4f(1,0,0,1); glVertex4f(vertices[12], vertices[13], vertices[14], vertices[15]); glVertex4f(vertices[16], vertices[17], vertices[18], vertices[19]); glVertex4f(vertices[20], vertices[21], vertices[22], vertices[23]); lE d()glEnd();
glutSwapBuffers();
}
Viewing transformation
Local (Object) Modeling W ld SLocal (Object)Space
Modelingtransformation
World Space
ViewingtransformationEye SpaceClip Space Projection
transformation
Perspectivedivide NDC space Viewport
mapping Screen spacel d dNormalized Device Coordinates
Viewing Transformation
Convert from the world coordinate system to the
( ) dicamera (eye) coordinate system
The camera position is th i ithe origin
Derive the basis from the direction and orientation f th
uvof the camera This makes the later
transformations easier ld
v ny Eye coordinate
frame coiworld x
z
Viewing Transformation Head tilt: Rotate your head by Just rotate the object about the eye space z axis - Mw2e =
v uv
n
(ex ey ez)
y
(ex,ey,ez) x
z
ModelView Transformation
Modeling and Viewing transformations concatenated together
ML2E (or, GL_MODELVIEW matrix) =
void display()
= M
void display() {
glClear(GL_COLOR_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
fixed function pipeline OpenGL= ML2E glLoadIdentity();
gluLookAt(0,0,1,0,0,0,0,1,0);display_all(); // your display routine
}
pipeline OpenGL
Viewing transformation
Local (Object) Modeling W ld SLocal (Object)Space
Modelingtransformation
World Space
ViewingtransformationEye SpaceClip Space Projection
transformation
Perspectivedivide NDC space Viewport
mapping Screen spacel d dNormalized Device Coordinates
Projection Transformation
Projection – map the object from 3D space to 2D screen
y yz
x
z
x
z
Perspective: gluPerspective() Parallel: glOrtho()
Projection Transformation
Maps (projects) everything in the visible Maps (projects) everything in the 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)
Projection Transformation
Maps (projects) everything in the visible Maps (projects) everything in the visible volume into a canonical view volume
(1, 1, -1)y
(-1, -1, 1)x
z
Z = 1 z = 1( 1 1)Canonical View Volume
Z = 1 z = -1 (-1, -1)
gluPerspective(fovy, aspect, near, far)
Projection Transformation
Projection Matrix
glFrustum(xmin, xmax, ymin, ymax, N, F) N = near plane, F = far plane
Viewing transformation
Local (Object) Modeling W ld SLocal (Object)Space
Modelingtransformation
World Space
ViewingtransformationEye SpaceClip Space Projection
transformation
Perspectivedivide NDC space Viewport
mapping Screen spacel d dNormalized Device Coordinates
Viewport The rectangular region in the screen for
displaying the graphical objects defined in the ld i dworld window
Defined in the screen coordinate system
V_T
glViewport(int left, int bottom, int (right-left),int (top-bottom));
V L V R
V_B
( p ));
call this function before drawing(calling glBegin() andV_L V_R (calling glBegin() and
glEnd() )
Recommended