CS380 LAB II OpenGL - PowerPoint PPT Presentation

1 / 36
About This Presentation
Title:

CS380 LAB II OpenGL

Description:

CS380 LAB II OpenGL Bochang Moon Reference1. [OpenGL course s by Rasmus Stenholt] Reference2. [http://nehe.gamedev.net/] – PowerPoint PPT presentation

Number of Views:105
Avg rating:3.0/5.0
Slides: 37
Provided by: 3482
Category:
Tags: lab | opengl | cs380 | teapot

less

Transcript and Presenter's Notes

Title: CS380 LAB II OpenGL


1
CS380 LAB II OpenGL
  • Bochang Moon
  • Reference1. OpenGL course slides by Rasmus
    Stenholt
  • Reference2. http//nehe.gamedev.net/

2
Goal
  • Introduce OpenGL programming
  • Help you do CS380 homework by yourself

3
Notice
  • Use Noah board for your questions
    (http//noah.kaist.ac.kr/course/CS380)

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
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)

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()
  • glBegin(GL_TRIANGLES)
  • 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,
  GLfloat   y,
  GLfloat   z)
15
Translations
  • 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)
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 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Model view matrix
19
Review 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
20
Review 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
21
Review 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()

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
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)

24
Rotations
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)

25
Rotations
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.
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

30 degrees
90 degrees
60 degrees
28
Tutorials
  • 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)

29
Scaling
  • x, y, z
  • scale factors along the x, y, and z axes,
    respectively

void glScalef( GLfloat   x,
  GLfloat   y,
  GLfloat   z)
30
Scaling
void glScalef( GLfloat   x,
  GLfloat   y,
  GLfloat   z)
X 0 0 0
0 Y 0 0
0 0 Z 0
0 0 0 1
31
Scaling
void display() glLoadIdentity()
glTranslatef(0,0,-3)
glScalef(2,1,1)
32
Review 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
33
Review 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
34
Review 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
35
Questions
  • 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
36
Next time
  • Viewing Transformation in OpenGL
Write a Comment
User Comments (0)
About PowerShow.com