1 / 33

CS101c GPU Programming

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

fynn
Télécharger la présentation

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CS101cGPU Programming Rendering, OpenGL, and Lighting

  2. Today • Review Rendering and OpenGL • Go from vertices/triangles to colors on screen CS101 GPU Programming

  3. Spaces • Object space • Convenient place to model the object CS101 GPU Programming

  4. Spaces • World space • Common coordinates for the scene CS101 GPU Programming

  5. Spaces • Camera space • Camera placed at origin • Generally looking down –Z, with Y up, X right C CS101 GPU Programming

  6. 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

  7. 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

  8. 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

  9. 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

  10. Transformations • Projection transformation (Camera -> NDC) CS101 GPU Programming

  11. Transformations • Projection transformation (Camera -> NDC) • n – near, f – far, l – left, r – right,t – top, b -bottom CS101 GPU Programming

  12. 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

  13. 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

  14. 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

  15. 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

  16. OpenGL State Machine CS101 GPU Programming

  17. OpenGL Transformation Pipeline • Modelview Matrix combines Object-World-Camera CS101 GPU Programming

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. Simple Lighting Models • Flat, Gaussian, Phong • Per face, per vertex, and per pixel versions of the same lighting equation CS101 GPU Programming

  27. Simple Lighting Models • Sum of several components CS101 GPU Programming

  28. 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

  29. 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

  30. Simple Lighting Models • Specular component graph Specular Power, S R dot Eye CS101 GPU Programming

  31. 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

  32. 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

  33. 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

More Related