33
Graphics Graphics Lab @ Korea University http://kucg.korea.ac.kr OpenGL Programming Part I Korea Univ. Computer Graphics Lab.

OpenGL Programming Part I

  • Upload
    others

  • View
    23

  • Download
    0

Embed Size (px)

Citation preview

Page 1: OpenGL Programming Part I

Graphics

Graphics Lab @ Korea University http://kucg.korea.ac.kr

OpenGL Programming

Part I

Korea Univ.

Computer Graphics Lab.

Page 3: OpenGL Programming Part I

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

Page 4: OpenGL Programming Part I

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

Page 5: OpenGL Programming Part I

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

Page 6: OpenGL Programming Part I

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

Page 7: OpenGL Programming Part I

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

Page 8: OpenGL Programming Part I

KUCG

Graphics Lab @ Korea University

Example

http://kucg.korea.ac.kr

Page 9: OpenGL Programming Part I

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

Page 10: OpenGL Programming Part I

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

Page 11: OpenGL Programming Part I

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

Page 12: OpenGL Programming Part I

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

Page 13: OpenGL Programming Part I

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

Page 14: OpenGL Programming Part I

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

Page 15: OpenGL Programming Part I

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

Page 16: OpenGL Programming Part I

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

Page 17: OpenGL Programming Part I

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

Page 18: OpenGL Programming Part I

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

Page 19: OpenGL Programming Part I

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

Page 20: OpenGL Programming Part I

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

Page 21: OpenGL Programming Part I

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

Page 22: OpenGL Programming Part I

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

Page 23: OpenGL Programming Part I

KUCG

Graphics Lab @ Korea University

Teapot Example

http://kucg.korea.ac.kr

Page 24: OpenGL Programming Part I

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

Page 25: OpenGL Programming Part I

KUCG

Graphics Lab @ Korea University

Point Example

http://kucg.korea.ac.kr

Page 26: OpenGL Programming Part I

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

Page 27: OpenGL Programming Part I

KUCG

Graphics Lab @ Korea University

Line Example

http://kucg.korea.ac.kr

Page 28: OpenGL Programming Part I

KUCG

Graphics Lab @ Korea University

Triangle Example

http://kucg.korea.ac.kr

Page 29: OpenGL Programming Part I

KUCG

Graphics Lab @ Korea University

Rectangle Example : Revisited

http://kucg.korea.ac.kr

Page 30: OpenGL Programming Part I

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

Page 31: OpenGL Programming Part I

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

Page 32: OpenGL Programming Part I

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

Page 33: OpenGL Programming Part I

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