The first test will be given in class on Wednesday, March 3. The test will cover everything that we have done from the beginning of the term through class on Friday, February 26. This includes material from the notes up though Section 3.3, as well as Labs 1 through 5.
You can expect a variety of questions on the test. There will certainly be some definitions and essay-type questions. There might be some questions on Blender or Gimp in that category. You should expect some questions on computer graphics in general as well as on OpenGL and Jogl in particular. Some questions will ask you to write code segments or methods. Some will ask you to read code and determine what it does. Some might ask you to design classes or discuss how you would go about designing them. The idea of scene graphs and their implementation is probably more important than might be indicated by their brief appearance in the list of topics below.
I will not ask you to code using the Java Graphics2D graphics API, but you should be familiar with its features (so that you could, for example, compare it with OpenGL). There will not be any purely mathematical questions, such as computing dot and cross products or working with matrices and homogenous coordinates.
Here are some terms and ideas that you should be familiar with:
Computer graphics Painting programs vs. Drawing programs Raster graphics and Vector graphics Basic elements of 3D Graphics: geometric modeling geometric transformations viewing and projection lighting textures Java 2D graphics: the Graphics2D class geometric transformations in 2D transformations can be used to transform objects or coordinates rotation, scaling, translation, shear shape classes such as Line2D Path2D Bezier curve segments; control points g2.fill(shape) and g2.draw(shape) OpenGL as a standard graphics API OpenGL and GPUs (graphics cards) GLCanvas and GLPanel GLEventListener the init(GLAutoDrawable) method the display(GLAutoDrawable) method the GL class Getting a GL object: GL gl = drawable.getGL() glBegin/glEnd OpenGL subroutine method names: what do the "3's" and "d's" mean? vertices and the glVertex* methods, such as gl.glVertex2d, gl.glVertex3f color and the glColor* methods, such as gl.glColor3f rotation, scaling, and translation in 3D glRotate*, glScale*, glTranslate* gl.glPushMatrix(), gl.glPopMatrix() hierarchical graphics scene graphs implementation of scene graphs with Java classes transformations in scene graphs coordinate systems object coordinates world coordinates eye coordinates normalized device coordinates device coordinates modeling transformation viewing transformation equivalence between modeling and viewing the modelview transformation the projection transformation; the view volume the viewport and the viewport transformation gl.glMatrixMode(GL.GL_MODELVIEW) vs. gl.GLMatrixMode(GL.GL_PROJECTION) perspective projection vs orthographic projection right-handed coordinate system rotation in 3D; the rotation axis and the direction of rotation enabling/disabling OpenGL features with gl.glEnable/gl.glDisable essential features that need to be enabled for 3D lighting; gl.glEnable(GL.GL_LIGHTING) and gl.glEnable(GL.GL_LIGHT0) color vs. "material"; using gl.glEnable(GL.GL_COlOR_MATERIAL) shade model; gl.glShadeModel(GL.GL_SMOOTH) vs. gl.glShadeModel(GL.GL_FLAT) depth test; gl.glEnable(GL.GL_DEPTH_TEST) the depth buffer; how it is used and why it needs to be cleared the hidden surface problem and how the depth test solves it display lists and why they might be used vertex attributes what is computed at a vertex, and what is interpolated to interior pixels vectors; direction and length normal vectors; glNormal3* why normal vectors are essential in lighting computations choosing a normal vector; faceted vs. smooth surfaces how the cross product can be used to compute normal vectors unit normal vectors; "normalizing" a vector using gl.glEnable(GL.GL_NORMALIZE) to have OpenGL normalize vectors front and back faces of polygons counterclockwise ordering of vertices textures 2D image textures texture coordinates; gl.glTexCoord2d(s,t) mapping textures onto objects using texture coordinates OpenGL primitive types GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_POLYGON, GL_TRIANGLES, GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_QUADS, GL_GUAD_STRIP gl.glPointSize(s) gl.glLineWidth(s) polygons in OpenGL must be planar and convex polygon mode; drawing polygons as wireframe polygon offset polygonal meshes indexed face set (IFS); vertex list and face list polygon grids; drawing grids as triangle strips. using a polygon grid to represent terrain Some basic ideas from Gimp: color components and adjusting color levels paths and Bezier curves gradients transparency and "partially selected" pixels Some basic ides from Blender: meshes lamps and spotlights the camera edit mode; modifying individual vertices in a mesh materials and textures procedural textures vs. image textures rendering an image