What is graphics API ?
Graphics Pipeline • A low-level interface to graphics hardware
• OpenGL
About 120 commands to specify 2D and 3D graphics
Graphics API and Graphics Pipeline OS independent
Efficient Rendering and Data transfer
Event Driven Programming
OpenGL
What it isn’
isn’t:
A windowing program or input driver because
How many of you have programmed in OpenGL?
How extensively?
OpenGL
GLUT: window management, keyboard, mouse, menue
GLU: higher level library, complex objects
How does it work? Primitives: drawing a polygon
From the implementor’s perspective:
geometric objects
properties: color… pixels
move camera and objects around
graphics pipeline
Primitives
Build models in appropriate units (microns, meters, etc.).
Primitives Rotate From simple shapes: triangles, polygons,…
Is it Convert to
+ material Translate 3D to 2D
visible? pixels
properties Scale
Primitives
1
Primitives: drawing a polygon Primitives: drawing a polygon
• Put GL into draw-polygon state
glBegin(GL_POLYGON);
• Send it the points making up the polygon
glVertex2f(x0, y0);
glVertex2f(x1, y1);
glVertex2f(x2, y2) ...
• Tell it we’re finished
glEnd();
Primitives Primitives
Triangle Strips Polygon Restrictions
Minimize number of vertices to be processed
• OpenGL Polygons must be simple
• OpenGL Polygons must be convex
(a) simple, but not convex
TR1 = p0, p1, p2 convex
TR2 = p1, p2, p3
Strip = p0, p1, p2, p3, p4,…
(b) non-simple
9 10
Material Properties: Color
Primitives: Material Properties
• glColor3f (r, g, b);
Red, green & blue color model
color, transparency, reflection properties, shading properties
Components are 0-1
RGB (Red, Green, Blue)
red 1 0 0
black 0 0 0
white 1 1 1
magenta 1 0 1
Primitives Primitives
2
Specifying Primitives Primitives: Material Properties
Many other material properties available:
glEnable(GL_POLYGON_STIPPLE);
glPolygonStipple(MASK); /* 32x32 pattern of bits */
…
run shapes.exe glDisable (GL_POLYGON_STIPPLE);
Code for all of today’s examples available from
http://www.xmission.com/~nate/tutors.html
Primitives Primitives
Primitives: Material Properties Light Sources
Most often point light sources
Diffuse: scattered light independent of angle (rough)
Specular: dependent on angle (shiny)
run lightposition.exe
Primitives Primitives
Transforms Position it relative to the camera
• Rotate Different views of the objects in the world
• Translate
Y
• Scale
• glRotate(x,y,z); X
• glTranslate(x,y,z); Z
• draw geometry
run transformation.exe
Primitives Primitives
3
Position it relative to the camera Position it relative to the camera
Perspective projection
eye view plane
Primitives Primitives
Position it relative to the camera Position it relative to the camera
Perspective projection Orthographic projection
Flat but preserving distances and shapes.
glFrustum (left, right, bottom, top, near, far); All the projectors are now parallel.
glOrtho (left, right, bottom, top, near, far);
Primitives Primitives
Clipping
Camera Transformations Not everything should be visible on the screen
Camera positioning just results in more
transformations on the objects:
transformations that position the object
wrt to the camera
any vertices that lie outside of the viewing volume are clipped
Primitives Primitives
4
Rasterizer
Go from pixel value in world coordinates to Drawing A Box
pixel value in screen coordinates
void DrawBox()
{
MakeWindow("Box", 400, 400);
Box
glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0);
glClearColor(1.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_POLYGON); (GLUT library)
/* or GL_LINES or GL_POINTS... */
glVertex2f(-0.5, -0.5);
glVertex2f( 0.5, -0.5);
glVertex2f( 0.5, 0.5);
glVertex2f(-0.5, 0.5);
glEnd();
}
Primitives
Getting Started
• Example Code
We will give you example code for each assignment.
Graphics API and Graphics Pipeline
Efficient Rendering and Data transfer
• Documentation:
Event Driven Programming
Book
OpenGL pages are on the web.
28
Graphics Hardware: Goal
Graphics Hardware: Goal
• Pioneered by Silicon Graphics, picked up by
graphics chips companies (Nvidia, 3dfx, S3,
ATI,...).
Very fast frame rate on scenes with lots
• OpenGL library was designed for this architecture
of interesting visual complexity (and vice versa)
• Changed a lot over last years
• Programmable pixel and vertex shaders
Nvidia person in class
February 8
5
Efficient Rendering and Data transfer State Machine
• Large set of state variables:
color
Minimize number of OpenGL calls current viewing position
line width
Minimize number of Vertices material properties...
Minimize data transfer from CPU to GPU • These variables (the state) then apply to every
subsequent drawing command
Billions of vertices per second
Every six month the speed doubles
31 32
State Machine State Machine
Minimize changes to the state and number of calls Minimize changes to the state and number of calls
glBegin(GL_POLYGON);
glColor3f(0.0, 1.0, 0.0)
glColor3f(0.0, 1.0, 0.0) glBegin(GL_POLYGON);
glVertex2f(x0, y0);
glVertex2f(x0, y0);
glColor3f(0.0, 1.0, 0.0) glVertex2f(x1, y1);
glVertex2f(x1, y1); glVertex2f(x2, y2) ...
glColor3f(0.0, 1.0, 0.0)
glVertex2f(x2, y2) ...
glEnd();
glEnd();
33 34
Transfer of data from CPU to GPU Display Lists
Store object in graphics card memory
Immediate transfer
glBegin(GL_TRIANGLES); • Encapsulate a sequence of drawing commands
glColor3f(0.0, 1.0, 0.0)
glVertex2f(x0, y0);
• Optimize and store
GLuint listName = glGenLists(1); /* new name */
glColor3f(0.0, 1.0, 0.0) glNewList (listName, GL_COMPILE); /* new list */
glVertex2f(x1, y1);
glColor3f(0.0, 1.0, 0.0) define object (glColor, glVertex, …)
glVertex2f(x2, y2)
glEnd(); glEndList();
Disadvantage:
static geometry – send the same data every frame glCallList(listName); /* draw one */
better to store geometry on graphics card memory
• Vertex buffer objects
35 36
6
Assignment 1 Height Fields
• Why?
Get started with OpenGL
Some room for creativity
Height Fields
• Where?
Wean 5336 or your machine at your risk!
• How?
Cross-realm authentication via andrew
Send problems to me or to the TA’s (soon)
Make sure that you made directory with correct
permissions—most common problem
37 38
Height Fields Next Class
• What?
Graphics API and Graphics Pipeline
Efficient Rendering and Data transfer
Event Driven Programming
• When? -- Due midnight February 1st
39 40