CS101c GPU Programming - PowerPoint PPT Presentation

Cs101c gpu programming
Download
1 / 33

  • 94 Views
  • Uploaded on
  • Presentation posted in: General

CS101c GPU Programming. Rendering, OpenGL, and Lighting. Today. Review Rendering and OpenGL Go from vertices/triangles to colors on screen. Spaces. Object space Convenient place to model the object. Spaces. World space Common coordinates for the scene. Spaces. Camera space

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

Download Presentation

CS101c GPU Programming

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Cs101c gpu programming

CS101cGPU Programming

Rendering, OpenGL, and Lighting


Today

Today

  • Review Rendering and OpenGL

  • Go from vertices/triangles to colors on screen

CS101 GPU Programming


Spaces

Spaces

  • Object space

    • Convenient place to model the object

CS101 GPU Programming


Spaces1

Spaces

  • World space

    • Common coordinates for the scene

CS101 GPU Programming


Spaces2

Spaces

  • Camera space

    • Camera placed at origin

    • Generally looking down –Z, with Y up, X right

C

CS101 GPU Programming


Spaces ctd

Spaces ctd

  • (Clipped) Normalize Device Coordinates

    • NDC

    • Camera still down –Z, Y up, X right

    • Space scaled to x, y, z in [-1, 1]

    • ‘3D effect’

CS101 GPU Programming


Transformations between spaces

Transformations Between Spaces

  • Matrix multiplication for Object, World, Camera

  • Take V = (x, y, z, 1)T

    • Simply set up a stack of matrix transformations Oi

    • Multiply together in reverse order to be applied

      • Vfinal = O1.O2.O3…On.V

    • Note: TRS = TSR, TRS != RTS != RST,

      • For T translation, R rotation, S scaling

CS101 GPU Programming


Transformations

Transformations

  • All transformations as 4x4 matrices

  • Translation

    • Translate x, y, z :T=

  • Scaling

    • Scale x,y,z by a, b, c: S =

CS101 GPU Programming


Transformations1

Transformations

  • Rotation

  • Let be the axis of rotation, and a be the angle of rotation, then we define R with:

  • S = , and

  • Then R =

  • Note that R-1 = RT

CS101 GPU Programming


Transformations2

Transformations

  • Projection transformation (Camera -> NDC)

CS101 GPU Programming


Transformations3

Transformations

  • Projection transformation (Camera -> NDC)

  • n – near, f – far, l – left, r – right,t – top, b -bottom

CS101 GPU Programming


Transformations between spaces1

Transformations Between Spaces

  • Projection

    • Just add P to start of stack:

      • Vfinal = P .O1.O2…On.V

    • Vfinal = (x, y, z, w)

    • VfinalNDC = (x/w, y/w, z/w, 1), clipped to [-1,1]

CS101 GPU Programming


Rasterization

Rasterization

  • Once vertices in NDC, draw triangles

  • Place pixels everywhere inside triangle boundary, interpolating data at boundaries

    • Barycentric coordinates

  • Initial pixel color interpolated from vertex data

    • Modify with GPU shader code

CS101 GPU Programming


Buffers

Buffers

  • Z-Buffer

    • Store the (linearly interpolated) depth values of each pixel

    • When drawing new pixel, if there’s already a closer pixel, don’t draw the new pixel.

    • Correctly renders objects in front of each other

  • Double Buffering

    • Render to one buffer while drawing other buffer onscreen, swap buffers to redraw.

CS101 GPU Programming


Opengl

OpenGL

  • How does OpenGL fit into all of this?

  • Implements basic pipeline

  • Works as a massive state machine to modify rendering properties

    • Set a property, won’t change until gets reset by code

    • E.g. color, transparency mode, lighting mode

CS101 GPU Programming


Opengl state machine

OpenGL State Machine

CS101 GPU Programming


Opengl transformation pipeline

OpenGL Transformation Pipeline

  • Modelview Matrix combines Object-World-Camera

CS101 GPU Programming


Opengl transformation stacks

OpenGL Transformation Stacks

  • Stacks of matrices; multiplied together at render time

  • Two stacks to control – Modelview, Projection

Modelview

Matrix Stack:

(32 4x4 matrices)

Projection

Matrix Stack:

(2 4x4 matrices)

CS101 GPU Programming


Opengl transformation stacks1

OpenGL Transformation Stacks

  • Stacks are part of state associated with vertices

  • Push and pop transformations

    • I.e., render an arm; push

    • Translate to hand; draw palm; push

      • Translate to and draw finger 1; pop

      • Translate to and draw finger 2; pop

    • Pop; Translate to other hand…

CS101 GPU Programming


Opengl transformations

OpenGL Transformations

  • Function calls to build 4x4 matrices, and place them on the transformation stack

  • glTranslate3f(x, y, z);

  • glRotate3f(a, x, y, z);

    • a in degrees; x, y, z don’t have to be normalized

  • glScale3f(x, y, z);

  • glFrustum(l, r, b, t, n, f);

    • Sets up projection transformation

CS101 GPU Programming


Opengl transformations1

OpenGL Transformations

  • An easier way to set up projection using GLU-GL Utility Library

  • gluPerspective(fovy, aspect, near, far);

    • Aspect – i.e., gl window w/h ratio

Aspect = w/h

CS101 GPU Programming


Opengl geometry rendering

OpenGL Geometry/Rendering

  • Now we have these transformations, we can use them to render triangles.

  • Render triangle with:

    • glBegin(GL_TRIANGLES);

      • glVertex3f(x1, y1, z1); glVertex3f(x2, y2, z2); glVertex3f(x3, y3, z3);

      • // more sets of 3 vertices for more triangles.

    • glEnd();

    • Add glNormal3f(xi, yi, zi); before each vertex to attach a normal.

CS101 GPU Programming


Opengl geometry rendering1

OpenGL Geometry/Rendering

  • glShade(GL_SMOOTH/GL_FLAT);

    • Tells OpenGL whether to use per vertex lighting or per face lighting (flat vs. gaussian)

    • For fixed pipeline, this won’t matter when we do lighting in GPU shaders

  • Lighting functions to set up light state

    • Same for material properties

    • Generally done at initialization

    • Light/Material state can be read in GPU code, so this step is still useful.

CS101 GPU Programming


Opengl things to do to render

OpenGL Things to do to render

  • Initialize

    • Set up lights, materials, buffering, window size, camera, projection, etc.

  • Redraw

    • Clear current buffer (from double buffer setup)

    • Setup transformations, Begin/End vertices, normals

    • Swap buffers

CS101 GPU Programming


Opengl utility toolkit glut

OpenGL Utility Toolkit (GLUT)

  • Very simple windowing system nicely interfaced with OpenGL

  • Sets up ‘Callback’ functions that get called when OpenGL needs to update state (redraw, user interface, etc).

  • We’ll use this for assignments…

    • … But we’ll give you most of the code

CS101 GPU Programming


Simple lighting models

Simple Lighting Models

  • Flat, Gaussian, Phong

    • Per face, per vertex, and per pixel versions of the same lighting equation

CS101 GPU Programming


Simple lighting models1

Simple Lighting Models

  • Sum of several components

CS101 GPU Programming


Simple lighting models2

Simple Lighting Models

  • Diffuse component equation

  • Id = Cd * cos( a )

    • Cd the diffuse color, L light vector, N normal vector

N

L

a

CS101 GPU Programming


Simple lighting models3

Simple Lighting Models

  • Specular component equation

  • Is = Cs * (R . Eye)S

    • Cs the specular color, S the ‘shininess’

    • R = 2N (L . N) – L

  • Note: All vectors must

    be normalized!

R

N

L

a

a

Eye

b

CS101 GPU Programming


Simple lighting models4

Simple Lighting Models

  • Specular component graph

Specular Power, S

R dot Eye

CS101 GPU Programming


Simple lighting models5

Simple Lighting Models

  • Lighting equation

  • Color = Ia + Id + Is

    • Ia ambient intensity

    • Id diffuse intensity

    • Is specular intensity

R

N

L

a

a

Eye

b

CS101 GPU Programming


Homework 1

Homework 1

  • Implement per pixel lighting using GLSL

  • Should be very short; mainly want to make sure GLSL is up and running for everyone

  • Due by class next Wednesday

  • Submit code for this assignment by either emailing a zip to Tamas, or emailing him the location of the code (CS cluster, UGCS, …)

    • Include a README explaining issues, and how to run the code!

CS101 GPU Programming


Upcoming

Upcoming…

  • Friday

    • Recitation for HW1

    • Finally start GLSL/GPU programming basics

  • Monday

    • More GLSL

    • Start talking about texturing

    • Introduce Bump mapping and Normal mapping

CS101 GPU Programming


  • Login