课程名称︰计算机图形
课程性质︰选修
课程教师:欧阳明
开课学院:电资学院
开课系所︰资工所、网媒所
考试日期(年月日)︰2011.11.21
考试时限(分钟):
试题 :
Interactive Computer Graphics Midterm Exam 2011/11/21
1. GLSL (20%)
(a) In vertex shader, what is gl_NormalMatrix used for? What is the
relationship between gl_ModelViewMatrix and gl_NormalMatrix?
(b) Without using functions glShadeModel(GL_FLAT) and
glShadeModel(GL_SMOOTH), how to use vertex shader and fragment shader
to implement Flat shading and Gouraud shading? Please describe what is
done in the vertex and fragment shader.
2. Rendering equation and ray tracing (20%)
(a) Describe the strength and weakness of Ray Tracing model, using the
theory of "The Rendering Equation".
(b) In addition to the bounding box (sphere) method, please propose three
more methods to speed up the ray tracing algorithm.
3. BSP Tree (15%)
Figure: http://i.imgur.com/jvafwo3.png
(a) Construct the Binary Space Partitioning (BSP) tree of the model in
Fig.3 below. Please use the node "a" as the root. Split any line
segment as you wish, and mark them as b.1, b.2, b.3, b.4, etc. Please
choose smaller numbers/alphabets as the sub-tree root node.
(b) From the BSP tree in (a), derive the display sequence in terms of the
given viewing position in this figure.
4. Coordinate (5%)
(a) Why does OpenGL use homogeneous coordinates (x, y, z, 1) instead of
Cartesian coordinates (x, y, z)?
5. Curves and Surfaces (10%)
Figure: http://i.imgur.com/8Ha337p.png
If we have five control points for the new 5-point Bezier curve,
P1(16, 4, 48), P2(8, 8, 16), P3(24, 28, 32), P4(32, 16, 8), P5(48, 12, 32).
The definition of this new curve is the same as the regular 4-point Bezier
curve. In order to draw the curve, we split it by half:
(1) If the 4-point Bezier curve has degree 3 in terms of t parameter, i.e.,
(1, t, t*t, t*t*t), what's the degree of this 5-point Bezier curve?
(2) Similar to the methods used in 4-point Bezier curve, what will be the
new control points of the two split curves?
(You need to give exact numbers for the first 5 control points only).
6. Head Pose Estimation (15%)
Figure: http://i.imgur.com/SaWaed1.png
Head pose information is useful in many human computer interaction systems.
Assuming that human head can be approximated by a bounding box with six
planes, and the orientation of the box is the pose of the head, we would
like to estimate the head pose via this box. Given that you have already
estimated the normal vector N(上面加向右箭头) = (a, b, -1) of the frontal
plane, how would you use this normal vector to drive a head model in
OpenGL programming?
(Note that the normal model faces to negative z-axis and positive y-axis
is its up vector. )
7. (5%) What is the topic of your term project? What will be the major
problems to be solved in this project?
8. Geometry Objects and Transformation. (10%)
The following are two code segments of an OpenGL program. Figure 1 is the
display of the program using function A as its display callback function.
If we replace function A by function B, what figure will be displayed on
the screen? Please draw your answer.
(Note: The width of the big rectangle is 80, and the height is 120. The
width of the small rectangle is 60, and the height is 30. The width of the
triangle is 60, and the height is 40)
function A: function B:
══════════════════ ══════════════════
void display(){ void display(){
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
gluLookAt(0,0,1,0,0,0,0,1,0); gluLookAt(0,0,1,0,0,0,0,1,0);
drawXAxis(); drawXAxis();
drawYAxis(); drawYAxis();
drawBigRectangle(); glRotatef(45,0,0,1);
drawSmallRectangle(); glTranslatef(200,0,0);
drawTriangle(); glPushMatrix();
glutSwapBuffers(); glTranslatef(0,100,0);
} drawTriangle();
══════════════════ glPopMatrix();
glPushMatrix();
Display: glTranslatef(-100,0,0);
glRotatef(45,0,0,1);
Figure 1: drawSmallRectangle();
http://i.imgur.com/r2tRkL4.png glPopMatrix();
drawBigRectangle();
glutSwapBuffers();
}
══════════════════