중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. l 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오. (20점) 1) 벡터는공간내에고정된위치를갖지않는다. _ 2) 아핀공간 (Affine Space) 에는거리는없으나한직선위에있다는개념은있으며거리의비가보존된다. 3) 기하파이프라인에서클리핑 (Clipping) 은정점단위로이루어진다. 4) 안티에일러싱 (Anti-aliasing) 이필요한장치는벡터그래픽시스템이다. 5) OpenGL 디스플레이리스트 (Display List) 는대용량그래픽의렌더링속도향상을위해사용된다. 6) glenable(gl_depth_test) 는렌더링속도의향상을위해눈에보이지않는면을제거하는후면추리기 (Backface Culling) 기법이다. 7) OpenGL 기본카메라는물체공간의원점 (Origin) 에위치하며 +z 방향을향하고있다. 8) glutpostredisplay() 함수는윈도우크기가변화된이벤트발생시호출된다. 9) glutstrokecharacter() 함수는문자를 3차원선으로그리는방식이므로, OpenGL의변환에의해영향을받는다. 10) 컴퓨터가영상을생성하는방법은, 합성카메라모델을사용하여카메라영상면에생성된영상이전후좌우가뒤집혀나타난다. 2. 다음문제에답하시오. (45 점 ) 1) +x 축이화면위방향, +y 축이화면의안쪽으로들어가는방향일때, 오른손좌표계 (right-handed coordinate system) 에서 +z 축이가리키는방향이어느곳인지 x, y, z 축을그리시오. (5 점 ) 1/7
2) 벡터그래픽시스템과래스터그래픽시스템을간단히설명하라. (5 점 ) 3) RGB 색모델 (color model) 과 CMY 색모델에대해간단히설명하시오. 그리고각각의색모델에서 (1, 1, 1), (1, 1, 0), (1, 0, 0) 이의미하는색이무엇인지적으시오. (5 점 ) 4) 벡터의내적 (dot product) 특성을정리한것이다. 아래의빈칸을채우시오. (5 점 ) 만약벡터 u v < 0 이라면두벡터간의사이각 q 는 에있다. 만약벡터 u v = 0 이라면두벡터간의사이각 q 는 에있다. 만약벡터 u v > 0 이라면두벡터간의사이각 q 는 에있다. 5) OpenGL 환경에서두벡터 u (2, 0, -3), v(1, 0, 2) 를그림으로표시하라. 그리고두벡터간의외적 (cross product), 즉 u x v 을계산하고그림으로표시하라. (5 점 ) 6) 컨벡스헐 (Convex Hull) 이란점들의집합 {P 1, P 2,.., P n } 을포함하는가장작은볼록객체이다. 컨벡스헐을만족하는아핀합 (Affine Sums) 을설명하시오. (5 점 ) 2/7
7) glutidlefunc(void (func*)(void)) 와 gluttimerfunc(unsigned int millis, void (func*)(int value), int value) 함수는무엇인가, 그리고각각의함수에답신함수 (callback) 의예를적어라. (5 점 ) 8) 더블버퍼링 (double buffering) 에서스왑버퍼 (swap buffer) 가무엇인지간단히서술하시오. 그리고더블버퍼링과싱글버퍼링 (single buffering) 의차이점을예를들어설명하라. (5 점 ) 9) OpenGL 에서 GL_QUAD_STRIP 를사용해서도형을그릴때, 다음그림과같은결과가되도록코드를작성하시오. (5 점 ) glbegin(gl_quad_strip); glvertex3fv( v1 ); glend(); 3/7
3. 다음행렬문제에답하시오. (35 점 ) 1) 다음 OpenGL 코드가만들어내는 3 차원아핀변환행렬 M 1 과 M 2 을간단히설명하라. (5 점 ) gltranslatef(3, 0, 0); glrotatef(90, 0, 0, 1); drawobject(); glgetfloatv(gl_modelview_matrix, M1); glrotatef(90, 0, 0, 1); gltranslatef(3, 0, 0); drawobject(); glgetfloatv(gl_modelview_matrix, M2); 2) 다음왼쪽기본도형에, 위의 3차원아핀변환행렬 M 1 과 M 2 를적용하여나타난도형의모습을오른쪽에그려서나타내라. ( 정확한척도로그릴것 ) (10점) y 5 1 4 x 3) 다음위의기본도형을중심점 (2, 3) 으로 x- 축과 y- 축으로 0.5 배로크기변환하는행렬 M 을 OpenGL 코드로작성하라. (5 점 ) drawobject(); glgetfloatv(gl_modelview_matrix, M); 4/7
4) 다음임의의축 a 에회전하는한점 x 가 a 에투영하여평행한성분인 x 을표현하는 행렬을구하라. (5 점 ) 5) 다음 OpenGL 코드를보고, 3 차원객체를계층적변환 (Hierarchical Transformation) 트리구조로그림으로표현하라. (10 점 ) void initdl() { GLfloat white[] = {1, 1, 1, 1}; GLfloat black[] = {0, 0, 0, 1}; GLfloat orange[] = {1.0f, 0.5f, 0.5f}; glnewlist(1, GL_COMPILE); glmaterialfv(gl_front, GL_AMBIENT_AND_DIFFUSE, white); gltranslatef(0.0f, 1.0f, 0.0f); glusphere(quadric, 1.5f, 20, 20); gltranslatef(0.0f, 2.0f, 0.0f); glusphere(quadric, 1.0f, 20, 20); gltranslatef(0.0f, 1.3f, 0.0f); glusphere(quadric, 0.6f, 20, 20); // body // upper body // head glmaterialfv(gl_front, GL_AMBIENT_AND_DIFFUSE, black); gltranslatef(0.2f, 0.1f, 0.6f); glusphere(quadric, 0.1f, 10, 10); // eye 5/7
gltranslatef(-0.2f, 0.1f, 0.6f); glusphere(quadric, 0.1f, 10, 10); // eye glmaterialfv(gl_front, GL_AMBIENT_AND_DIFFUSE, orange); gltranslatef(0.0f, -0.1f, 0.6f); glrotatef(0.0f,1.0f, 0.0f, 0.0f); glucylinder(quadric, 0.1f, 0.0, 0.35, 10, 2); // nose } glendlist(); Body 6/7
4. 다음그림에서와같이 3 차원공간의점 P (x, y, z) 가벡터 L 방향으로가는광선 (P(t) = P + t L) 은평면에한점 S (Sx, Sy, Sz) 를만난다. 평면의공식 (N P + d = 0) 을이용하여 t 를계산하라. 그리고 S 를계산하는공식을유도하라. (extra 10 점 ) P L S N P+d =0 S = P + tl N S + d = 0 7/7