Download presentation
Presentation is loading. Please wait.
Published byMarjorie Ellis Modified over 6 years ago
1
Reference1. [OpenGL course slides by Rasmus Stenholt]
CS380 LAB II OpenGL Bochang Moon Reference1. [OpenGL course slides by Rasmus Stenholt] Reference2. [
2
Goal Introduce OpenGL programming
Help you do CS380 homework by yourself
3
Notice Use Noah board for your questions (
4
Outline Transformations Modeling Transformations Draw 3D objects
Translate Rotate Scale
5
Transformations All transformations in OpenGL are carried out by matrices There are different matrices for different purposes The modelview matrix GL_MODELVIEW The projection matrix GL_PROJECTION The texture matrix GL_TEXTURE All matrices are post-multiplied I.e. the current matrix M becomes MN when N is performed Post-multiplication is closely linked to matrix stacks
6
Transformations Matrices All matrices in OpenGL are 4x4
Why use 4-D matrices for 3-D graphics? A 4x4 matrix can rotate and translate the same vector in one operation A 4x4 matrix can make the otherwise non-linear perspective projection linear Modern CPUs are very efficient at handling 4x4 matrices
7
Transformations Specify which matrix is the current matrix Mode
GL_MODELVIEW Applies subsequent matrix operations to the model view matrix stack GL_PROJECTION Applies subsequent matrix operations to the projection matrix stack etc. void glMatrixMode( GLenum mode);
8
Set a view int main( int argc, char* argv[] )
{ … glutReshapeFunc( reshape ); } void reshape(int width, int height) { glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); double aspect = width/double(height); gluPerspective(45, aspect, 1, 1024); }
9
Set a view fovy aspect zNear zFar
glMatrixMode(GL_PROJECTION); glLoadIdentity(); double aspect = width/double(height); gluPerspective(45, aspect, 1, 1024); void gluPerspective( GLdouble fovy, aspect, zNear, zFar); fovy View angle, in degrees, in the y direction aspect Ratio of x (width) to y (height) zNear Distance from the viewer to the near clipping plane (positive) zFar Distance from the viewer to the far clipping plane (positive)
10
Set a view Detailed explanations about Viewing Transformation will be provided in the next week.
11
Draw 3D objects Use a set of OpenGL primitives e.g.,
glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 1.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glEnd(); …
12
Draw 3D objects GLUT provide simple 3D objects e.g., Teapot object
void glutSolidTeapot(GLdouble size); void glutWireTeapot(GLdouble size);
13
Draw 3D objects void display(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-1.0); glColor3f(r,g,b); glutWireTeapot(0.5); glFlush(); }
14
Translations Multiply the current matrix by a translation matrix
x, y, z Specify the x, y, and z coordinates of a translation vector void glTranslatef( GLfloat x, y, z);
15
Translations Multiply the current matrix by a translation matrix
void glTranslatef( GLfloat x, y, z); Translation matrix (4x4) 1 X Y Z
16
Review of Translations
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-1.0);
17
Review of Translations
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-1.0); Model view matrix
18
Review of Translations
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-1.0); 1 Model view matrix
19
Review of Translations
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-1.0); 1 1 -1 1 -1 Model view matrix
20
Review of Translations
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-1.0); Again?? 1 -1 1 -1 1 -2 Model view matrix
21
Review of Translations
void display(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0,0,-1.0); glColor3f(r,g,b); glutWireTeapot(0.5); glFlush(); }
22
Tutorials Move your teapot based on key inputs ‘l’: left ‘r’: right
‘u’: up ‘d’: down ‘f’: move out ‘n’: move in ‘l’ ‘f’
23
Tutorials float xpos = 0.0; float ypos = 0.0; float zpos = -2.0;
void keyboard(unsigned char key, int x, int y){ if (key == 'l') xpos -= 0.1; else if (key == 'r') xpos += 0.1; else if (key == 'u') ypos += 0.1; else if (key == 'd') ypos -= 0.1; else if (key == 'f') zpos -= 0.1; else if (key == 'n') zpos += 0.1; glutPostRedisplay(); } void display(){ … glTranslatef(xpos,ypos,zpos); }
24
Rotations angle x, y, z angle of rotation, in degrees
void glRotatef( GLfloat angle, x, y, z); angle angle of rotation, in degrees x, y, z x, y, and z coordinates of a vector, respectively Normalized vector (If not, GL will normalize it)
25
Rotations void glRotatef( GLfloat angle, x, y, z); ? 1
x, y, z); ? 1 The questions will be resolved in the CS380 lecture “Modeling Transformations“.
26
Rotations void display(){ … glTranslatef(xpos,ypos,zpos);
glRotatef(30,0,0,1); } 30 degrees rotation based on a normalized vector (0, 0, 1)
27
Tutorials Rotate your teapot on X axis e.g., 30, 60, and 90 degrees
28
Tutorials 30 degrees on X axis 60 degrees on X axis
glRotatef(30,1,0,0); 60 degrees on X axis glRotatef(60,1,0,0); 90 degrees on X axis glRotatef(90,1,0,0);
29
Scaling x, y, z scale factors along the x, y, and z axes, respectively
void glScalef( GLfloat x, y, z);
30
Scaling void glScalef( GLfloat x, y, z); X Y Z 1
31
Scaling void display(){ … glLoadIdentity(); glTranslatef(0,0,-3);
glScalef(2,1,1); }
32
Review of Scaling void display(){ 1 … glLoadIdentity();
glTranslatef(0,0,-3); glScalef(2,1,1); } 1 Model view matrix
33
Review of Scaling void display(){ … glLoadIdentity();
glTranslatef(0,0,-3); glScalef(2,1,1); } 1 1 -3 1 -3 Model view matrix
34
Review of Scaling void display(){ … glLoadIdentity();
glTranslatef(0,0,-3); glScalef(2,1,1); } 1 -3 2 1 2 1 -3 Model view matrix
35
Questions Why use 4-D matrices for 3-D graphics?
Combine multiple transformations into a 4x4 matrix 1 -3 2 1 2 1 -3 Model view matrix
36
Next time Viewing Transformation in OpenGL
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.