The first test will be given in class on Monday, September 30. The test will cover Section 0 through the first half of Section 9 of the notes. From Section 9, it will only cover normal vectors and the basic ideas of lighting. The test will also cover Labs 1 through 5.
Some things not on the test: using class Path2D to draw with Java; writing HTML or CSS; working with checkboxes and popup menus in JavaScript; GLUT event handling, such as glutKeyboardFunc(f); programming in C aside from writing basic OpenGL code; setting up JOGL; matrices; homogeneous coordinates.
The format of the test will be the usual: some essay questions and definitions; reading some code and explaining its purpose; writing some code. There will probably be some geometrical questions that ask you to work with transformations and primitives. I might give you some code and ask you what it draws. I might give you a picture and ask how it could be drawn. There will be less actual coding than on most of my tests.
Here are some terms and ideas that you should be familiar with:
computer graphics
pixels
painting programs vs. drawing programs
Basic elements of 3D Graphics:
geometric modeling lighting and material
geometric transformations textures
viewing and projection animation
2D graphics with Java Graphics2D
AffineTransforms in Graphics2D:
g.scale(a,b);
g.rotate(angle); // angle in radians
g.translate(dx,dy);
g.shear(a,b);
AffineTransform transform = g.getTransform()
g.setTransform(transform);
Shape classes that use real numbers
Line2D, Line2D.Float, Line2.Double
Rectangle2D, Rectangle2D.Float, Rectangle2D.Double
Ellipse2D, Ellipse2D.Float, Ellipse2D.Double
g.fill(shape)
g.draw(shape)
All the old Java graphics stuff, like g.setColor, g.drawLine, g.fillRect, ...
aspect ratio
antialiasing
modeling transformation
combining transformations
(applied to an object in the opposite order to their order in the code)
bezier curves; control points for bezier curves
hierarchical modeling
using subroutines to implement hierarchical modeling
scene graphs
traversing a scene graph
how a stack of transformations is used while traversing a scene graph
Basic JavaScript programming:
variables are untyped
using var to declare variables
writing subroutines using the syntax: function name(params) { ... }
JavaScript arrays
JavaScript objects
things that are essentially like Java (assignment, if, for, while, try)
HTML canvas graphics:
the properties graphics.lineWidth, graphics.fillStyle, and graphics.strokeStyle
graphics.scale(a,b);
graphics.rotate(angle); graphics.beginPath();
graphics.translate(dx,dy); graphics.moveTo(x,y);
graphics.save(); graphics.lineTo(x,y);
graphics.restore(); graphics.arc(x,y,radius,startAngle,endAngle);
graphics.fillRect(x,y,w,h); graphics.fill();
graphics.strokeRect(x,y,w,h); graphics.stroke();
3D graphics
3D coordinate systems and the z-axis
the standard OpenGL coordinate system
right-handed coordinate system
hidden surface problem
painter's algorithm
depth test and the depth buffer
rotation in 3D; the axis of rotation
the right-hand rule for direction of rotation in 3D
object coordinates
world coordinates
eye coordinates
clip coordinates
device coordinates
the modelview transformation; relationship between modeling and viewing transforms
using glPushMatrix/glPopMatrix to implement hierarchical graphics in OpenGL
projection transform
orthographic projection
perspective projection
the view volume
the depth test requires a finite view volume
lighting and materials
the difference between "color" and "material" in OpenGL
vectors
length of a vector
unit vector
dot product of two vectors
normal vectors
how normal vectors are used for lighting
diffuse reflection and specular reflection
the OpenGL primitives:
GL_POINTS GL_TRIANGLES
GL_LINES GL_TRIANGLE_FAN
GL_LINE_LOOP GL_TRIANGLE_STRIP
GL_LINE_STRIP
OpenGL 1.0 functions that you should understand and be able to use:
glClearColor(r,g,b,a)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glBegin(primitive) and glEnd()
glVertex3f(x,y,z), glVertex2f(x,y), etc
glColor3f(x,y,z)
glNormal3f(x,y,z)
glTranslatef(dx,dy,dz)
glScalef(a,b,c)
glRotatef(angle, axisX, axisY, axisZ) // angle in degrees
glPushMatrix()
glPopMatrix()
glMatrixMode(GL_PROJECTION) and glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
glFrustum(left,right,bottom,top,near,far)
glOrtho(left,right,bottom,top,near,far)
glEnable(GL_DEPTH_TEST)
glEnable(GL_LIGHTING)
glEnable(GL_LIGHT0)
glEnable(GL_COLOR_MATERIAL)
glEnable(GL_NORMALIZE)
GLUT and GLU functions that you should understand and be able to use
gluLookAt( eyex,eyey,eyez, refx,refy,refz, upx,upy,upz )
glutSolidCube(size)
glutSolidSphere(radius,slices,stacks)
glutSolidCylinder(radius,height,slices,stacks)
glutSolidCone(radius,height,slices,stacks)