Lab 1: Hello OpenGL (and GLUT)!
CS 370 Labs Lab 1
OpenGL programs are usually written in C although there have been wrappers written to
encapsulate OpenGL functionality in Java and C#. In any case, to write OpenGL programs
we must be able to interact with
Lab 4: Affine Transformations - Part I,
Scaling and Rotation
CS 370 Labs Lab 4
All vertices passed into the graphics card are processed by a multi-stage graphics
pipeline. The graphics pipeline is optimized to process graphics (as opposed to a more
genera
Lab 8: 3D Perspective Projection and
Efficient Rendering
CS 370 Labs Lab 8
Orthogonal projection is typically used when the camera is at a fixed location and the
objects are manipulated through transformations. By duality, however, (or Einstein
relativity
Lab 5: Affine Transformations - Part II,
Translation and General
CS 370 Labs Lab 5
Last lab we learned the matrix representation and OpenGL functions for performing
scaling and rotation. However, these transformations are performed relative to the origin
Lab 6: User Interaction and Animation
CS 370 Labs Lab 6
Last lab we finished the basic transformations in 2D (which extend directly to 3D). At this
point, however, we can only create static scenes. A more useful system would allow for
the user to interact
Lab 2: Basic Geometry
CS 370 Labs Lab 2
All graphics API's, including OpenGL, utilize standard hardware on all graphics cards
known as the graphics pipeline. The version of the graphics chip (GPU) will determine
which version of the API is supported in ha
Lab 3: Linear Algebra
CS 370 Labs Lab 3
Linear algebra, i.e. the manipulation of vectors and matrices, has a fundamental role in
computer graphics. The graphics pipeline is optimized to perform certain linear algebra
computations in a single (vector) oper
Lab 7: 3D Orthographic Projection
CS 370 Labs Lab 7
We are now ready to begin rendering 3D scenes. Unlike 2D, which has a direct correlation
between world coordinates and screen coordinates, we must project our 3D world onto a
2D screen. The quality of ou
Lab 9: Time-Based Animation and
Fonts
CS 370 Labs Lab 9
Ultimately we would like our animations to be system independent (assuming the user's
system has sufficient graphics capabilities) by rendering based on time, e.g. at a fixed
frame rate. Fortunately
Lab 14: Recursive Subdivision
CS 370 Labs Lab 14
While we are now able to add numerous lighting effects into our scene, the final rendering
can appear rather poor. This is due to the coarse tessalation done by the pipeline
particularly for large flat surf
Lab 13: Light Sources
CS 370 Labs Lab 13
In the last lab we introduced basic lighting by creating materials and defining surface
normals for our objects using a simple directional light. The light source we created was a
single directional light source wh
Lab 12: Basic Lighting
CS 370 Labs Lab 12
Now that we have completed creating 3D geometry, we would like to enhance our scenes
through the application of shadowing caused by lighting. To do this we will use a simple
(but somewhat unrealistic) lighting mod
Lab 10: Basic GLSL I - Using Shaders
CS 370 Labs Lab 10
Modern graphics hardware supports programmable vertex and/or fragment (pixel) shaders
(with current hardware also including programmable geometry shaders) and the most
recent graphics API's (e.g. Dir
Lab 11: Basic GLSL II - Writing Shaders
CS 370 Labs Lab 11
In the last lab we saw how to use programmable shaders written in GLSL. Hence if we are
able to get shader source code, we could implement them within our standard OpenGL
code using the load_shade
Lab 15: Simple Shadow Mapping
CS 370 Labs Lab 15
So far our light sources have provided illumination and highlights to the objects in the
scene. For additional lighting effect, we would like the light sources to cast shadows
(further enhancing the user pe