Upload
others
View
23
Download
0
Embed Size (px)
Citation preview
Graphics
Graphics Lab @ Korea University http://kucg.korea.ac.kr
OpenGL Programming
Part I
Korea Univ.
Computer Graphics Lab.
KUCG
Graphics Lab @ Korea University http://kucg.korea.ac.kr
OpenGL Reference Sites
OpenGL Official Site
http://www.opengl.org/
Khronos Group
http://www.khronos.org/
Nehe Productions
http://nehe.gamedev.net/
KUCG
Graphics Lab @ Korea University
OpenGL-Related Files
Header File gl.h, glaux.h, glu.h, glut.h
Microsoft SDKs\v6.0A\Include (VS 2008)
or Microsoft SDKs\v7.0A\Include (VS 2010)
Static Library opengl32.lib, glaux.lib, glu32.lib, glut32.lib
Microsoft SDKs\v6.0A\Lib (VS 2008)
or Microsoft SDKs\v7.0A\Lib (VS 2010)
Dynamic Library opengl32.dll, glu32.dll, glut32.dll
C:\WINDOWS\system32
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Project Creation [VS 2008] (1/2)
[File] [New] (Ctrl+Shift+N)
[Project types] [General]
[Templates] [Empty Project]
Enter the project file name
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Project Creation [VS 2008] (2/2)
[Project] [Settings…] (Alt+F7)
[Link] [Input] [Additional Dependencies]
Type ‘opengl32.lib glu32.lib glut32.lib glaux.lib’
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Project Creation [VS 2010] (1/2)
[File] [New] [Project] (Ctrl+Shift+N)
[Visual C++] [Win32] [Win32 Console App]
Enter the project name
[Empty project]
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Project Creation [VS 2010] (2/2)
[Project] [Properties] (Alt+F7)
[Configuration Properties] [Linker] [Input]
[Additional Dependencies]
Type ‘opengl32.lib glu32.lib glut32.lib glaux.lib’
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
OpenGL Primitives
Point
GL_POINTS
Line
GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
Polygon
GL_POLYGON
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_QUAD_STRIP
http://kucg.korea.ac.kr
Miscellaneous
Cube
Tetrahedron
Icosahedron
Sphere
Torus
Cone
KUCG
Graphics Lab @ Korea University
Point
GL_POINTS
glBegin(GL_POINTS);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glEnd();
http://kucg.korea.ac.kr
v1 v2
v3 v4
KUCG
Graphics Lab @ Korea University
Line (1/3)
GL_LINES
glBegin(GL_LINES);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glEnd();
http://kucg.korea.ac.kr
v1 v2
v3 v4
KUCG
Graphics Lab @ Korea University
Line (2/3)
GL_LINE_STRIP
glBegin(GL_LINE_STRIP);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glEnd();
http://kucg.korea.ac.kr
v1 v2
v3 v4
KUCG
Graphics Lab @ Korea University
Line (3/3)
GL_LINE_LOOP
glBegin(GL_LINE_LOOP);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glEnd();
http://kucg.korea.ac.kr
v1 v2
v3 v4
KUCG
Graphics Lab @ Korea University
Triangle (1/3)
GL_TRIANGLES
glBegin(GL_TRIANGLES);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glEnd();
http://kucg.korea.ac.kr
v1 v3
v2
KUCG
Graphics Lab @ Korea University
Triangle (2/3)
GL_TRIANGLE_STRIP
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glVertex3f(v5x, v5y, v5z);
glEnd();
http://kucg.korea.ac.kr
v1
v2
v3
v4
v5
KUCG
Graphics Lab @ Korea University
Triangle (3/3)
GL_TRIANGLE_FAN
glBegin(GL_TRIANGLE_FAN);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glVertex3f(v5x, v5y, v5z);
glEnd();
http://kucg.korea.ac.kr
v1
v2
v3
v4 v5
KUCG
Graphics Lab @ Korea University
Quadrilateral (1/2)
GL_QUADS
glBegin(GL_QUADS);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glEnd();
http://kucg.korea.ac.kr
v1 v4
v3 v2
KUCG
Graphics Lab @ Korea University
Quadrilateral (2/2)
GL_QUAD_STRIP
glBegin(GL_QUAD_STRIP);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glVertex3f(v5x, v5y, v5z);
glVertex3f(v6x, v6y, v6z);
glEnd();
http://kucg.korea.ac.kr
v1
v2
v3
v4
v5
v6
KUCG
Graphics Lab @ Korea University
Polygon
GL_POLYGON
glBegin(GL_POLYGON);
glVertex3f(v1x, v1y, v1z);
glVertex3f(v2x, v2y, v2z);
glVertex3f(v3x, v3y, v3z);
glVertex3f(v4x, v4y, v4z);
glVertex3f(v5x, v5y, v5z);
glVertex3f(v6x, v6y, v6z);
glEnd();
http://kucg.korea.ac.kr
v1
v2
v3 v4
v6
v5
KUCG
Graphics Lab @ Korea University
Miscellaneous (1/3)
Cube
void glutSolidCube(GLdouble size)
void glutWireCube(GLdouble size)
Tetrahedron
void glutSolidTetrahedron(void)
void glutWireTetrahedron(void)
Icosahedron
void glutSolidIcosahedron(void)
void glutWireIcosahedron(void)
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Miscellaneous (2/3)
Sphere
void glutSolidSphere(GLdouble radius, GLint slices, GLint stacks)
void glutWireSphere(GLdouble radius, GLint slices, GLint stacks)
Torus
void glutSolidTorus(GLdouble innerRadius, GLdouble
outerRadius, GLint nsides, GLint rings)
void glutWireTorus(GLdouble innerRadius, GLdouble outerRadius,
GLint nsides, GLint rings)
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Miscellaneous (3/3)
Cone
void glutSolidCone(GLdouble base_radius, GLdouble height,
GLint slices, GLint stacks)
void glutWireCone(GLdouble base_radius, GLdouble height, GLint
slices, GLint stacks)
Teapot
void glutSolidTeapot(GLdouble size)
void glutWireTeapot(GLdouble size)
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Teapot Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Basic Functions (1/2)
glPointSize(GLfloat size)
glGetFloatv(GL_POINT_SIZE_RANGE)
Returns the range of the point size that the hardware supports
glLineWidth(GLfloat width)
glGetFloatv(GL_LINE_WIDTH_RANGE)
Returns the range of the line width that the hardware supports
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Point Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Basic Functions (2/2)
glShadeModel(mode)
Sets the polygon filling method
mode
GL_FLAT
By only one color
GL_SMOOTH
By the weighted averaging the colors of member
vertices (gradation)
Default value
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Line Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Triangle Example
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Rectangle Example : Revisited
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
‘Single vs. Double Buffering’
glFlush() vs. glutSwapBuffers()
Single Buffering (GLUT_SINGLE, Default)
Double Buffering (GLUT_DOUBLE)
cf.) triple buffering
Graphic Processor
Frame Buffer
Video Controller
Display Device
Graphic Processor
Front Buffer
Video Controller
Display Device
Back Buffer
Slow Very Fast
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Single Buffering vs. Double Buffering :
Assumption & Environment
Assumption
Time to write a frame (graphic processor, GPU)
10ms
Time to read a frame (video controller, CTRL)
3ms
No delay for switching read/write modes
Can’t read & write the frame buffer at the same time
Mutual exclusion
Compare the time to display 3 frames
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Single Buffering vs. Double Buffering :
Single Buffering
Step 1 (0ms) : 10ms
GPU Write frame #1 into the frame
buffer
Step 2 (10ms) : 3ms
CTRL Read frame #1 from the
frame buffer
Shoot frame #1 to the display
Step 3 (13ms) : 10ms
GPU Write frame #2 into the frame
buffer
Step 4 (23ms) : 3ms CTRL
Read frame #2 from the frame buffer
Shoot frame #2 to the display
Step 5 (26ms) : 10ms GPU
Write frame #3 into the frame buffer
Step 6 (36ms) : 3ms CTRL
Read frame #3 from the frame buffer
Shoot frame #3 to the display
Complete (39ms) Avg. 13ms/frame
http://kucg.korea.ac.kr
KUCG
Graphics Lab @ Korea University
Single Buffering vs. Double Buffering :
Double Buffering
Step 1 (0ms) : 10ms GPU
Write frame #1 into the front buffer
Step 2 (10ms) : 3ms CTRL
Read frame #1 from the front buffer
Shoot frame #1 to the display
GPU Write frame #2 (30%) into the
back buffer
Step 3 (13ms) : 7ms GPU
Write frame #2 (70%) into the back buffer
Step 4 (20ms) : 3ms CTRL
Read frame #2 from the back buffer
Shoot frame #2 to the display
GPU Write frame #3 (30%) into the
back buffer
Step 5 (23ms) : 7ms GPU
Write frame #3 into the back buffer
Step 6 (30ms) : 3ms CTRL
Read frame #3 from the back buffer
Shoot frame #3 to the display
Complete (33ms) Avg. 11ms/frame
http://kucg.korea.ac.kr