Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic...

44
Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming Graphics Pipeline OpenGL API Primitives: Lines, Polygons Attributes: Color Example [Angel Ch. 2] 1

Transcript of Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic...

Page 1: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Jernej Barbic University of Southern California

CSCI 420 Computer Graphics Lecture 2

Basic Graphics Programming

     Graphics Pipeline      OpenGL API      Primitives: Lines, Polygons      Attributes: Color Example [Angel Ch. 2]

1

Page 2: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

5

Teaching Assistant

Yijing Li

Office hours TBA

Page 3: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

5

Course Producer

Xiyu Wang

Same office hours as TA

Page 4: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

What is OpenGL

4

•  A  low-­‐level  graphics  library  (API)  for  2D  and  3D    interac>ve  graphics.    

•  Descendent  of  GL  (from  SGI)  •  First  version  in  1992;  now:  4.2  (2012)  •  Managed  by  Khronos  Group  (non-­‐profit  consor>um)  •  API  is  governed  by  Architecture  Review  Board  

(part  of  Khronos)  

Page 5: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Where is OpenGL used

5

•  CAD  

•  Virtual  reality  

•  Scien>fic  visualiza>on  

•  Flight  simula>on  

•  Video  games  

5

Page 6: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Graphics library (API)

6

•  Intermediary  between  applica>ons  and  graphics  hardware  

•  Other  popular  APIs:  Direct3D  (MicrosoU)  OpenGL  ES  (embedded  devices)  X3D  (successor  of  VRML)   6

Page 7: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

OpenGL is cross-platform

7

•  Same  code  works  with  liYle/no  modifica>ons  

•  Implementa>ons:    Windows,  Mac,  Linux:  ships  with  the  OS  Linux:  Mesa,  a  freeware  implementa>on.

Page 8: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

How does OpenGL work

8

From the programmer’s point of view:

1.  Specify geometric objects

2.  Describe object properties •  Color •  How objects reflect light

Page 9: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

How does OpenGL work (continued)

9

3.  Define how objects should be viewed •  where is the camera •  what type of camera

4.  Specify light sources •  where, what kind

5.  Move camera or objects around for animation

Page 10: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

The result

10

the result

Page 11: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

OpenGL is a state machine

11

State variables: color, camera position, light position, material properties...

These variables (the state) then apply to every subsequent drawing command.

They persist until set to new values by the programmer.

Page 12: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

OpenGL Library Organization

•  GL (Graphics Library): core graphics capabilities •  GLU (OpenGL Utility Library): utilities on top of GL • GLUT (OpenGL Utility Toolkit): input and windowing

12

Page 13: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Graphics Pipeline

13

Primitives+ material

properties

Translate Rotate Scale

Is it visible on screen?

3D to 2D Convert to pixels

Shown on the screen (framebuffer)

Page 14: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

OpenGL uses immediate-mode rendering

14

•  Application generates stream of geometric primitives (polygons, lines)

•  System draws each one into the framebuffer

•  Entire scene redrawn anew every frame

•  Compare to: off-line rendering (e.g., Pixar Renderman, ray tracers)

Page 15: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

The pipeline is implemented by OpenGL, graphics driver and the graphics hardware

15

OpenGL programmer does not need to implement the pipeline.

However, pipeline is reconfigurable if needed “shaders”

Page 16: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Graphics Pipeline

16

•  Efficiently implementable in hardware (but not in software)

•  Each stage can employ multiple specialized processors, working in parallel, busses between stages

•  #processors per stage, bus bandwidths are fully tuned for typical graphics use

•  Latency vs throughput

Page 17: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Vertices

• Vertices in world coordinates • void glVertex3f(GLfloat x, GLfloat y, GLfloat z)

 – Vertex (x, y, z) is sent down the pipeline.  – Function call then returns.

• Use GLtype for portability and consistency • glVertex{234}{sfid}[v](TYPE coords)

17

Page 18: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Transformer

• Transformer in world coordinates • Must be set before object is drawn!

 glRotatef(45.0, 0.0, 0.0, -1.0);  glVertex2f(1.0, 0.0);

• Complex [Angel Ch. 4]

18

Page 19: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Clipper

• Mostly automatic (must set viewport)

19

Page 20: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Projector

• Complex transformation [Angel Ch. 5]

Orthographic Perspective

20

Page 21: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Rasterizer

• Interesting algorithms [Angel Ch. 7] • To window coordinates •  Antialiasing

21

Page 22: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Primitives

• Specified via vertices • General schema

 glBegin(type);    glVertex3f(x1, y1, z1);    ...    glVertex3f(xN, yN, zN);  glEnd();

• type determines interpretation of vertices •  Can use glVertex2f(x,y) in 2D

22

Page 23: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Example: Draw Square Outline

• Type = GL_LINE_LOOP

   glBegin(GL_LINE_LOOP);      glVertex3f(0.0, 0.0, 0.0);      glVertex3f(1.0, 0.0, 0.0);      glVertex3f(1.0, 1.0, 0.0);      glVertex3f(0.0, 1.0, 0.0);    glEnd();

• Calls to other functions are allowed between  glBegin(type) and glEnd();

23

Page 24: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Points and Line Segments

24

glBegin (GL_POINTS); glVertex3f(…); … glVertex3f(…); glEnd();

Draw points

Page 25: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Polygons

• Polygons enclose an area

• Rendering of area (fill) depends on attributes • All vertices must be in one plane in 3D

25

Page 26: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Polygon Restrictions

• OpenGL Polygons must be simple • OpenGL Polygons must be convex

 (a) simple, but not convex

                                                                       (c) convex

   (b) non-simple

26

Page 27: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Why Polygon Restrictions?

• Non-convex and non-simple polygons are  expensive to process and render

• Convexity and simplicity is expensive to test • Behavior of OpenGL implementation on

 disallowed polygons is “undefined” • Some tools in GLU for decomposing complex

 polygons (tessellation) • Triangles are most efficient

27

Page 28: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Polygon Strips

• Efficiency in space and time • Reduces visual artefacts

• Polygons have a front and a back, possibly with  different attributes!

28

Page 29: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Attributes: color, shading and reflection properties

•  Part of the OpenGL state

•  Set before primitives are drawn

•  Remain in effect until changed!

29

Page 30: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Physics of Color

• Electromagnetic radiation • Can see only tiny piece of the spectrum

30

Page 31: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Color Filters

• Eye can perceive only 3 basic colors • Computer screens designed accordingly

Amplitude

 B

Wavelength [nanometer]

G

R

Source: Vos & Walraven

31

Page 32: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Color Spaces

• RGB (Red, Green, Blue)  – Convenient for display  – Can be unintuitive (3 floats in OpenGL)

• HSV (Hue, Saturation, Value)  – Hue: what color  – Saturation: how far away from gray  – Value: how bright

• Other formats for movies and printing

32

Page 33: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

R

R

B

G

G

B

V

S H

R G

B

RGB vs HSV

 Gimp Color Picker

33

Page 34: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Example: Drawing a shaded polygon

• Initialization: the “main” function

 int main(int argc, char** argv)  {    glutInit(&argc, argv);    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);    glutInitWindowSize (500, 500);    glutInitWindowPosition (100, 100);    glutCreateWindow (argv[0]);    init ();  ...

34

Page 35: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

GLUT Callbacks

• Window system independent interaction • glutMainLoop processes events

 ...    glutDisplayFunc(display);    glutReshapeFunc(reshape);    glutKeyboardFunc (keyboard);    glutMainLoop();    return 0;  }

35

Page 36: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Initializing Attributes

• Separate in “init” function

 void init(void)  {    glClearColor (0.0, 0.0, 0.0, 0.0);

   /* glShadeModel (GL_FLAT); */    glShadeModel (GL_SMOOTH);  }

36

Page 37: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

The Display Callback

• The routine where you render the object • Install with glutDisplayFunc(display)

 void display(void)  {    glClear (GL_COLOR_BUFFER_BIT); /* clear buffer */ setupCamera(); /* set up the camera */ triangle (); /* draw triangle */ glutSwapBuffers (); /* force display */ }

37

Page 38: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Drawing

• In world coordinates; remember state!

 void triangle(void)  {    glBegin (GL_TRIANGLES);      glColor3f (1.0, 0.0, 0.0); /* red */      glVertex2f (5.0, 5.0);      glColor3f (0.0, 1.0, 0.0); /* green */      glVertex2f (25.0, 5.0);      glColor3f (0.0, 0.0, 1.0); /* blue */      glVertex2f (5.0, 25.0);    glEnd();  }

38

Page 39: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

The Image

   glShadeModel(GL_FLAT) glShadeModel(GL_SMOOTH)

color of last vertex each vertex separate color smoothly interpolated

39

Page 40: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Flat vs Smooth Shading

Flat Shading Smooth Shading

40

Page 41: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Projection

• Mapping world to screen coordinates void reshape(int w, int h) {  glViewport (0, 0, (GLsizei) w, (GLsizei) h);  glMatrixMode (GL_PROJECTION);  glLoadIdentity ();  if (w <= h)    gluOrtho2D (0.0, 30.0, 0.0, 30.0 * (GLfloat) h/(GLfloat) w);  else    gluOrtho2D (0.0, 30.0 * (GLfloat) w/(GLfloat) h, 0.0, 30.0);  glMatrixMode(GL_MODELVIEW);

}

41

Page 42: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Orthographic Projection

• 2D and 3D versions • glOrtho2D(left, right, bottom, top) • In world coordinates!

42

Page 43: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Viewport

• Determines clipping in window coordinates • glViewPort(x, y, w, h)

43

Page 44: Basic Graphics Programmingrun.usc.edu/cs420-s14/lec02-basic/02-basic.pdf · Jernej Barbic University of Southern California CSCI 420 Computer Graphics Lecture 2 Basic Graphics Programming

Summary

1. 2. 3. 4. 5.

A Graphics Pipeline The OpenGL API Primitives: vertices, lines, polygons Attributes: color Example: drawing a shaded triangle

44