Introduction to OpenGL

COS 350 - Computer Graphics

Overview

Overview

Extras, Add-on Libraries

Traditional OpenGL

Traditional OpenGL

Traditional OpenGL

State

State Machine

To create an image


Default values makes starting easy

Programmable Pipeline

Much more flexibility


New model — dataflow architecture

Traditional OpenGL

Immediate mode graphics

Can be very inefficient, for real objects geometry and state change mix together

glBegin()
    glColor()
    glTexCoord()
    glNormal()
    glVertex()
    // ...
glEnd()

Traditional OpenGL

As hardware progressed, more of the functionality was performed on the video card.


Eventually, video cards added support for replacing default functionality with programmed shaders.

Efficiency

"Traditional" state-driven OpenGL

Loop over all triangles:
    vertex 1
        set color state
        set position state
    vertex 2
        set color state
        set position state
    vertex 3
        set color state
        set position state
    draw triangle

Efficiency

Shader program

Loop over all triangles
    vertex 1
        transfer position to video card
        transfer color to video card
    vertex 2
        transfer position to video card
        transfer color to video card
    vertex 3
        transfer position to video card
        transfer color to video card
    draw triangle

Efficiency

Small improvement

Use TRIANGLE_STRIP

transfer large data structure
draw triangle strip

Not real "mesh", but fewer vertices transfered

Efficiency

Use Buffer Object

Transfer all data to buffer
Draw all triangles (object or entire scene)

Can leave in video card memory to draw again

OR

Draw second object in different position

Programming Shaders

C like languages with support for vectors, matrices, etc.

GLSL (GL Shading Language) works with OpenGL

Cg (C for graphics)

Advantages

Traditional OpenGL

Sidenote:

Advantages

Colors are assigned to vertices

Hardware "shades" by interpolating color, even with shader program

Why?

Gourard Shading

Simple computation

Calculate color at each vertex

light-object interaction

depends on light source, including location

should be calculated at each pixel

Phong Shading

More accurate

Phong Shading

How can this be? Triangles are flat!




Approximation to surface

Phong Shading

Gourard shading: per-vertex phong shading

Phong shading: per-fragment phong shading

Terminology

Vertex shader

Fragment shader

Terminology

Traditional Pipeline (each section uses state values)

Vertex Shader (retains some state variables)

Rasterizer?

Rasterizer?

Traditional Pipeline (each section uses state values)

Fragment Shader (some state variables retained)

loading...