중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오. (20점) 1) 행렬 (A B) C = A (B C) o o 2) 벡터 a b > 0 이면두벡터간의각도는 90 θ <180 이다. 3) glcolor3f(1.0, 1.0, 0.0) 은보라색을나타낸다. 4) 하나의윈도우안에싱글버퍼와더블버퍼를동시에사용할수없다. 5) 비트맵 (bitmap) 의문자는크기가변하지않는다. 6) 볼록한 (convex) 객체는객체내에임의의두점을연결하는선분위에놓인임의의점 이객체내에있다. 7) 더블버퍼링 (double buffering) 을사용하면프로그램의 frame rate이증가된다. 8) 오른손좌표계 (right-handed coordinate system) 에서는반시계방향 (counter-clockwise) 회전 (rotation) 일때 θ가양수이다. 9) 크기변환 (scaling) 은아핀강체변환 (affine rigid-body transformation) 이다. 10) 하나의점과두개의평행하지않는벡터에의해평면 (plane) 이결정된다. 2. 다음문제에답하시오. (50점) 1) RGB 색깔모델로표현된색깔 (0.5, 0.2, 0.7) 을 CMY 색깔모델을사용하여표현했을때의값은무엇인가? 2) 더블버퍼링 (Double buffering) 에대해설명하시오. 1/8
3) +x축이오른쪽, +y축이화면의안쪽으로들어가는방향일때, 오른손좌표계 (righthanded coordinate system) 를사용하는좌표계에서 +z축이가리키는방향이어느곳인지 x, y, z축을그리시오. 4) 동차좌표 (homogeneous coordinates) 로표현된 3차원공간의점 (1, 0, -3, 2) 과동일한아핀공간 (affine space) 에서의점의좌표 (x, y, z) 는무엇인가? 5) (1, 2, 3) 만큼이동 (translate) 한후, z축으로 30도회전 (rotate) 한 4x4 행렬 (matrix) 를계산하시오. (cos30 o, sin30 o 은그대로사용할것 ) 6) 다음 OpenGL 함수중기본요소가화면상에나타날수있는방법을제어하는속성 (attributes) 함수를모두동그라미표시하시오. glbegin glend gltranslate glcolor3f gluortho2d glpointsize glvertex3f glpolygonmode gllinewidth 2/8
7) glbegin(gl_triangles), glend(), glvertex를사용하여아래와같은그림을그리는간단한 OpenGL 프로그램 code를작성하시오. glbegin(gl_triangles); p2 p4 p1 p5 p3 glend(); 8) 다음은입방체 (cube) 를그리는 OpenGL 프로그램의일부이다. 빈칸을채우시오. void drawcube() p3 p2 glbegin(gl_quads); glnormal3f(,, ); // left p7 p0 p6 p1 p4 p5 glnormal3f(,, ); // bottom... glend(); 3/8
9) 투영변환 (projection transformation) 과관련있는 OpenGL 함수 2 개를적어라. 10) 아래그림에서와같이 2차원공간의점 P(x, y) 를직선 L (y = x) 에대하여반사 (reflection) 시켜 P (x, y ) 으로변환시키는아핀변환을유도하라. y P y = x P x 3. drawsquare() 는 (0,0) 원점에서 1 x 1 정사각형을그려주는함수이다. 아래에주어진간단한코드를이해하고 World Coordinate System을중심으로하여그림을그려라. (10점) glloadidentity(); gltranslatef(3, 0, 0); drawsquare(); gltranslatef(-6, 0, 0); drawsquare(); gltranslatef(0, 3, 0); glrotatef(45, 0, 0, 1); drawsquare(); gltranslatef(3, 0, 0); drawsquare(); 4/8
4. 임의의회전축 a [a x, a y, a z ] (a는단위벡터 ) 에대해 θ만큼회전 (rotate) 하는행렬 (matrix) 는아래의공식과같이간단히정의될수있다. 이때, Symmetric matrix A는 A와 v (x, y, z) 를곱한것 Av = a(a v) 이다. 또한, Skew matrix B는 B와 v (x, y, z) 를곱한것 Bv = a x v이다. 이공식을이용하여 4x4 행렬 (matrix) R을구하라. (10점) R = I cosθ + Symmetric (1 cosθ) + Skew sinθ R = 5/8
5. 다음은로봇의계층적변환 (hierarchical transformation) 을표현한구조를보여주고있다. glpushmatrix(), glpopmatrix(), gltranslatef(), glrotatef() 을사용하여로봇을표현하는 display() 함수를만들어라. void display() torso(); gltranslatef(); glrotatef(); head(); 6/8
6. 다음은 vector class의일부를보여주고있다. 두벡터간의내적 (dot product) 과두점간의거리 (distance) 를구하는함수를작성하시오. ( 보너스문제 extra 10점 ) class vector public: float x, y, z; vector(void) x = y = z= 0.0f; vector(float x_, float y_, float z_) x = x_; y = y_; z = z_;... float length(void); void normalize(void); static float dot(const vector &v1, const vector &v2); static float distance(const vector &v1, const vector & v2); ; float vector::length( void ) return( (float)sqrt( x * x + y * y + z * z ) ); void vector::normalize( void ) float flength = length(); x = x / flength; y = y / flength; z = z / flength; static float vector::dot (const vector &v1, const vector &v2) static float vector::distance (const vector &v1, const vector &v2) 7/8
7. 정점 (1, 1), (3, 1), (3, 4) 를갖는삼각형을점 (2, 2) 에대하여 x-축으로 -1만큼, y-축으로 2만큼크기변환하라. 먼저변환행렬 (matrix) 를계산하고변환된각정점의값을계산하시오. ( 보너스문제 extra 10점 ) 답 ( ) 5 4 3 2 y 1 0 0 1 2 3 4 x - 끝 - 8/8