0% found this document useful (0 votes)
68 views

Viewing and Transformation

This document describes the key concepts and functions for viewing transformations, modeling transformations, projection transformations, viewport transformations, and matrix manipulation in OpenGL. It explains functions like gluLookAt() for viewing transformations, glTranslate(), glRotate(), glScale() for modeling transformations, gluPerspective() and glOrtho() for projection, glViewport() for viewport transformations, and glMatrixMode(), glLoadIdentity(), glPushMatrix(), glPopMatrix() for managing the matrix stack. The document provides references to documentation for each OpenGL function.

Uploaded by

TarekHemdan
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
68 views

Viewing and Transformation

This document describes the key concepts and functions for viewing transformations, modeling transformations, projection transformations, viewport transformations, and matrix manipulation in OpenGL. It explains functions like gluLookAt() for viewing transformations, glTranslate(), glRotate(), glScale() for modeling transformations, gluPerspective() and glOrtho() for projection, glViewport() for viewport transformations, and glMatrixMode(), glLoadIdentity(), glPushMatrix(), glPopMatrix() for managing the matrix stack. The document provides references to documentation for each OpenGL function.

Uploaded by

TarekHemdan
Copyright
© © All Rights Reserved
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 28

Viewing and Transformation

OpenGL program -3
#include glut.h
static GLfloat year=0.0f, day=0.0f;
void display();
void reshape(GLsizei , GLsizei );
void idle();

void keyboard(unsigned char , int, int);


void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
}

1/7

OpenGL program -3

2/7

void display()
{
// clear the buffer
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glPushMatrix();
glutWireSphere(1.0, 20, 16);
glRotatef(year, 0.0, 1.0, 0.0);
glTranslatef(3.0, 0.0, 0.0);
glRotatef(day, 0.0, 1.0, 0.0);
glutWireSphere(0.5, 10, 8);
glPopMatrix();
// swap the front and back buffers
glutSwapBuffers();
}

// the Sun

// the Planet

OpenGL program -3

3/7

void reshape(GLsizei w, GLsizei h)


{
// viewport transformation
glViewport(0, 0, w, h);
// projection transformation
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 1.0, 20.0);
// viewing and modeling transformation
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 3.0, 5.0, // eye
0.0, 0.0, 0.0, // center
0.0, 1.0, 0.0); // up
}

OpenGL program -3
// GLUT idle function
void idle()
{
day += 10.0;
if(day > 360.0)
day -= 360.0;
year += 1.0;
if(year > 360.0)
year -= 360.0;
// recall GL_display() function
glutPostRedisplay();
}

4/7

OpenGL program -3
// GLUT keyboard function
void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case 'd':
day += 10.0;
if(day > 360.0)
day -= 360.0;
glutPostRedisplay();
break;
case 'y':
year += 1.0;
if(year > 360.0)
year -= 360.0;
glutPostRedisplay();
break;
case 'a':
// assign idle function
glutIdleFunc(GL_idle);
break;
case 'A':
glutIdleFunc(0);
break;
case 27:
exit(0);
}
}

5/7

OpenGL program -3

6/7

int main(int argc, char** argv)


{
glutInit(&argc, argv);
glutInitWindowSize(500, 500);
glutInitWindowPosition(0, 0);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutCreateWindow("Planet");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutIdleFunc(idle);
glutMainLoop();
}

OpenGL program -3

7/7

The camera analogy

Set up tripod and pointing


the camera at the scene
(viewing transformation)

Arrange the scene to be


photographed into the
desired composition
(modeling transformation)

1/2

The camera analogy

Choose a camera lens or


adjust the zoom
(projection transformation).

Determine how large you


want the final photograph
to be
(viewport transformation).

2/2

Overview
Vertex
Vertex

Modelview
Modelview
Matrix
Matrix

X
Y
Z
W
Object
coordinat
es
TODO:

Projection
Projection
Matrix
Matrix

Perspective
Division

Viewport
Viewport
Transformation
Transformation
X
Y

eye
coordinat
es
TODO:

1. Switch matrix
mode to
GL_MODELVIEW and
call glLoadIdentity().
2. Call gluLookAt().
3. Your own modeling
transformations.

clip
coordinat
es

normalized
device
coordinates
TODO:

1. Switch matrix mode to


GL_PROJECTION and call
glLoadIdentity().
2. Call gluPerspective() if
you want perspective
projection.
3. Call gluOrtho2D() if you

window
coordinat
es

1. Call
glViewport().

Matrix in OpenGL

Consider a transformation (T1T2Tn). To


build the transformation matrix, we
shall multiply identity matrix by T1 then
T2until Tn,
The order of issuing commands shall be
inversed.

Ex: rotate then translate


glTranslatef(1,0,0);
glRotatef(45.0, 0, 0, 1);

Viewing transformations

1/2

gluLookAt(

GLdouble eyex, GLdouble eyey, GLdouble eyez,


GLdouble centerx, GLdouble centery, GLdouble centerz,

);
eyex, eyey, eyez is where the camera
is positioned.
centerx, centery, centerz is where the
camera looks at.
Upx, upy, upz is the up-vector of the
camera.

GLdouble upx, GLdouble upy, GLdoubpe upz

http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glufnc01_8wtw.asp

Viewing transformations

2/2

Use gluLookAt() to indicate where


the camera is placed and aimed.
If not called,
the camera has a
default position at the origin,
points down the negative Z-axis,
and an up-vector of positive Y-axis.

Modeling transformation

1/4

Perform rotate, translate, scale and


combinations of these
transformations
In OpenGL, modeling and viewing
transformation are combined into
the modelview matrix before the
transformation are applied.

Modeling transformation

2/4

glTranslate{fd}( TYPE x,TYPE y,TYPE z );


Multiplies current matrix by a matrix
that moves an object by x,y,z

http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc03_9a05.asp

glTranslatef( 0, 0, -1
);

Modeling transformation

glRotate{fd}(
);

3/4

TYPR angle,TYPE x,TYPR y,TYPE z

Multiplies current matrix by a matrix


that rotates an object in a
counterclockwise direction about the
ray from origin to (x,y,z) with angle as
the degrees.
http://msdn.microsoft.com/library/default.asp?url=/library/englRotatef( 45.0, 0, 0,
us/opengl/glfunc03_21d1.asp

1);

Modeling transformation

4/4

glScale{fd}( TYPE x,TYPE y,TYPE


z );

Multiplies current matrix by a matrix


that scales an object along axes.
http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc03_1691.asp

glScalef( 2.0, -0.5, 1.0


);

Projection transformation
1/5

Determine what the field of view


(or viewing volume) is and how
objects are projected onto the
screen.

Projection transformation
2/5

Perspective Projection

glFrustum( GLdouble left, GLdouble


right, GLdouble bottom, GLdouble
top, GLdouble near, GLdouble far );

http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc02_0oj1.asp

Projection transformation
3/5

gluPerspective( GLdouble fovy,


GLdouble aspect, GLdouble near,
GLdouble far );

http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glufnc01_6m79.asp

Projection transformation
4/5

Orthographic projection

glOrtho( GLdouble left, GLdouble


right, GLdouble bottom, GLdouble
top, GLdouble near, GLdouble far );

http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc03_8qnj.asp

Projection transformation
5/5

gluOrtho2D( GLdouble left, GLdouble


right, GLdouble bottom, GLdouble
top);

Equal to calling glOrtho with near=1


and far=1.
http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glufnc01_5alg.asp

Viewport transformations

void glViewport( GLint x, GLint y, GLsizei


width, GLsizei height );

Transform the final image into some region


of the window
x, y :The lower-left corner of the viewport
rectangle, in pixels. The default is (0,0).
width, height :The width and height of the
viewport. The default is set to the
dimensions of that window
http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc03_5ur8.asp

Matrix Manipulation

void glMatrixMode( GLenum mode );

Switch between three modes

1/4

GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE

Each matrix mode has its own matrix


stack.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc03_4vs5.asp

void glLoadIdentity();
Set current matrix to the 4x4 identity
matrix

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/opengl/glfunc03_6h2x.asp

Matrix Manipulation

2/4

glLoadMatrix{f,d}( const TYPE*


m );

Replaces current matrix by a user


defined matrix
The user defined matrix m is a 4x4
array
http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc03_3260.asp

Matrix Manipulation

3/4

glMultMatrix{f,d}( const TYPE*


m );

Multiplies current matrix by a user


defined matrix
The user defined matrix m is a 4x4
array.
http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc03_0xmg.asp

Matrix Manipulation

void glPushMatrix();

4/4

Push current matrix into matrix stack.

Void glPopMatrix();

Pop matrix from matrix stack


These stack operations of matrix is
very useful for constructing a
hierarchical structure.
http://msdn.microsoft.com/library/default.asp?url=/library/enus/opengl/glfunc03_246w.asp

You might also like