## ECSE-4750 Computer Graphics, Rensselaer Polytechnic Institute, Final Exam (v2), Fall 2011, 15 Dec 2011 3-6pm, DCC330

NAME: _______________________________________________________

EMAIL:______________________________________________ RIN:_________________________________

Subtotal of questions 1-8:_______________, q 9-17:____________, q 18-25:____________, TOTAL: ______________

Answer every question.There are 6 pages with 25 questions. Each
question is worth 4 points.

This exam is open book: you may use calculators and any
paper books and notes that you brought with you. You may not
use computers or communication devices, or share material
with other students.

- ________ Consider a 3D triangle with vertices (0,0,0), (5,0,10),
(0,20,0). What is the z value of the point in the triangle with
x=3, y=1?

- ________ Why can the following not possibly be a 3D Cartesian rotation
matrix?
{$ \begin{pmatrix} 1& 0 &0\\1 & 0 &0\\0& 0 &1\end{pmatrix} $}

- ________ If
*a=(4,3,5)*then write {$(a\cdot p)\, a$} as a matrix M, depending only on {$a$}, times {$p$}.

- ________ What is the 4x4 homogeneous matrix for a 3D rotation by 90 degrees about the X axis,
followed by this translation:
*x'=x-1, y'=y+1, z'=z+2*.

- ________ Write the vector formula for the 3D rotation by 60 degrees about the Y axis.

- ______ Write the quaternion for the 3D rotation by 60 degrees about the Y axis.

- ________ What is one problem with interpolating a spline through the control points instead of approximating a spline near the points?

- ______ What advantage do cubic splines have over quadratic splines?

- ________ What technique computes the surroundings visible as a reflected image in a shiny object?

- ________ When projected objects are less than one pixel large, there is a lot of fictitious high frequency clutter in the image. Name the technique used to
fix this.

- ________ In the graphics pipeline, does the rasterizer send its output to the
*vertex*or*fragment*shader? (Pick one, or pick both.)

- ________ In the graphics pipeline, when a triangle is processed, the
(x,y,z) coordinates of the vertices are interpolated across the whole
triangle to give the coordinates of each fragment. Name two other things
that may commonly be specified at the vertices and then interpolated
across the triangle to give a value for each fragment.

- ________ Where in the graphics pipeline does texture mapping take place?

- ________ When clipping in 3D, how many independent clippers are required in
the pipeline?

- ______ Do a view normalization of this square A(3,3), B(3,4), C(4,4), D(4,3) that is being viewed from (0,0) and projected into the plane x=1. The transformed square, when seen with a parallel projection from x= -infinity should look the same as the original square when seen in perspective from (0,0). That is, write the transformed coordinates for ABCD. Also, draw a figure showing the projection.

- ______ Are vertices assembled into objects in the vertex shader, in the fragment shader, or in the rasterizer?

- ________ Draw an example where clipping a polygon causes it to split into two pieces (connected by edges running along the edge of the clip window).

- ________ Draw 1/8 of a circle of radius R=12 using the Bresenham method. Show your work.

- ________ Following the principle that
*less is more*, the OpenGL designers decided not to include some functionality that a program that processes images would probably need. Name it.

- ________ When compositing several images, the limited precision of the
color (frame) buffers may hurt the image quality. Therefore, OpenGL also
has another buffer to composit into. Name it.

- ______ Is the following code a vertex shader or a fragment shader?
`void main(void) { gl_FragColor = gl_FrontColor;}`

- ______ Do you set a texture coordinate thus
`glTexCoord2f(s0, t0);`

before or after the vertex it applies to?

- _______ Can the standard OpenGL pipeline easily handle light scattering from
object to object? Why (not)?

Look at this fragment shader:// diffuse.fs: per-pixel diffuse lighting varying vec3 N, L; void main(void) { // output the diffuse color float intensity = max(0.0, dot(normalize(N), normalize(L))); gl_FragColor = gl_Color; gl_FragColor.rgb *= intensity; }

- ______ Where do the variables N and L get their values from?

- _______ What uses the value of the variable
`gl_FragColor`

?

- ______ What technique is used here:
`gl_FragColor.rgb`

?

*END*