Title: CS380 LAB II OpenGL
1CS380 LAB II OpenGL
- Bochang Moon
- Reference1. OpenGL course slides by Rasmus
Stenholt - Reference2. http//nehe.gamedev.net/
2Goal
- Introduce OpenGL programming
- Help you do CS380 homework by yourself
3Notice
- Use Noah board for your questions
(http//noah.kaist.ac.kr/course/CS380)
4Outline
- Transformations
- Modeling Transformations
- Draw 3D objects
- Translate
- Rotate
- Scale
5Transformations
- 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
6Transformations
- 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
7Transformations
- 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)
8Set 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)
9Set a view
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
double aspect width/double(height)
gluPerspective(45, aspect, 1, 1024)
void gluPerspective( GLdouble  fovy,
 GLdouble  aspect,
 GLdouble  zNear,
 GLdouble  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)
10Set a view
- Detailed explanations about Viewing
Transformation will be provided in the next
week.
11Draw 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()
- glBegin(GL_TRIANGLES)
-
- glEnd()
12Draw 3D objects
- GLUT provide simple 3D objects
- e.g., Teapot object
- void glutSolidTeapot(GLdouble size)
- void glutWireTeapot(GLdouble size)
13Draw 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()
-
14Translations
- 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,
 GLfloat  y,
 GLfloat  z)
15Translations
- Multiply the current matrix by a translation
matrix
void glTranslatef( GLfloat  x,
 GLfloat  y,
 GLfloat  z)
1 0 0 X
0 1 0 Y
0 0 1 Z
0 0 0 1
Translation matrix (4x4)
16Review of Translations
- glMatrixMode(GL_MODELVIEW)
- glLoadIdentity()
- glTranslatef(0,0,-1.0)
17Review of Translations
- glMatrixMode(GL_MODELVIEW)
- glLoadIdentity()
- glTranslatef(0,0,-1.0)
Model view matrix
18Review of Translations
- glMatrixMode(GL_MODELVIEW)
- glLoadIdentity()
- glTranslatef(0,0,-1.0)
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Model view matrix
19Review of Translations
- glMatrixMode(GL_MODELVIEW)
- glLoadIdentity()
- glTranslatef(0,0,-1.0)
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -1
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -1
0 0 0 1
Model view matrix
20Review of Translations
- glMatrixMode(GL_MODELVIEW)
- glLoadIdentity()
- glTranslatef(0,0,-1.0)
- glTranslatef(0,0,-1.0)
Again??
1 0 0 0
0 1 0 0
0 0 1 -1
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -2
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -1
0 0 0 1
Model view matrix
21Review of Translations
- void display()
- glClear(GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT) - glMatrixMode(GL_MODELVIEW)
- glLoadIdentity()
- glTranslatef(0,0,-1.0)
- glTranslatef(0,0,-1.0)
- glColor3f(r,g,b)
- glutWireTeapot(0.5)
- glFlush()
-
22Tutorials
- Move your teapot based on key inputs
- l left
- r right
- u up
- d down
- f move out
- n move in
l
f
23Tutorials
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()
float xpos 0.0 float ypos 0.0 float zpos
-2.0
void display() glTranslatef(xpos,ypos,zpos)
24Rotations
void glRotatef( GLfloat  angle,
 GLfloat  x,
 GLfloat  y,
 GLfloat  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)
25Rotations
void glRotatef( GLfloat  angle,
 GLfloat  x,
 GLfloat  y,
 GLfloat  z)
? ? ? 0
? ? ? 0
? ? ? 0
0 0 0 1
The questions will be resolved in the CS380
lecture Modeling Transformations.
26Rotations
- void display()
-
- glTranslatef(xpos,ypos,zpos)
- glRotatef(30,0,0,1)
-
30 degrees rotation based on a normalized vector
(0, 0, 1)
27Tutorials
- Rotate your teapot on X axis
- e.g., 30, 60, and 90 degrees
30 degrees
90 degrees
60 degrees
28Tutorials
- 30 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)
29Scaling
- x, y, z
- scale factors along the x, y, and z axes,
respectively
void glScalef( GLfloat  x,
 GLfloat  y,
 GLfloat  z)
30Scaling
void glScalef( GLfloat  x,
 GLfloat  y,
 GLfloat  z)
X 0 0 0
0 Y 0 0
0 0 Z 0
0 0 0 1
31Scaling
void display() glLoadIdentity()
glTranslatef(0,0,-3)
glScalef(2,1,1)
32Review of Scaling
void display() glLoadIdentity()
glTranslatef(0,0,-3)
glScalef(2,1,1)
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Model view matrix
33Review of Scaling
void display() glLoadIdentity()
glTranslatef(0,0,-3)
glScalef(2,1,1)
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -3
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -3
0 0 0 1
Model view matrix
34Review of Scaling
void display() glLoadIdentity()
glTranslatef(0,0,-3)
glScalef(2,1,1)
2 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
2 0 0 0
0 1 0 0
0 0 1 -3
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -3
0 0 0 1
Model view matrix
35Questions
- Why use 4-D matrices for 3-D graphics?
- Combine multiple transformations into a 4x4
matrix
2 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
2 0 0 0
0 1 0 0
0 0 1 -3
0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 -3
0 0 0 1
Model view matrix
36Next time
- Viewing Transformation in OpenGL