서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/9) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거하지않음. 1. 다음은색깔혼합 (Color Blending) 에관한문제이다. (c S α S ) 와 (c D α D ) 를두이미지 S 와 D 의대응되는화소의미리곱한색깔 (pre-multiplied color) 이라할때, 두색깔의합성을통하여생성한결과색깔 (c O α O ) 는다음과같이표현할수 있다. ( co α O ) = F S ( cs α S ) + F D ( cd α D (a) 만약결과값이 (0.8, 0.0, 0.0, 0.8) 이라할때, 이는그화소를어떻게칠해야한다는것인지정확히기술하라. (b) 그림 1 이암시하는합성연산의경우해당하는 F S 와 F D 의값은각각얼마인가? Figure 1: 색깔혼합예 1 (c) 만약 S over D 연산을적용한다면, 합성후 α O 는어떤값을가질지를 S 와 D 의관련값을사용하여정확히기술하라. (d) 그림 2 의상황을고려하자. 지금결과이미지의한화소에네개의물체 Y, R, G, 그리고 K 가순서대로투영되고있는데, 이물체들은각각순서대로 순수한 노란색, 빨간색, 초록색, 그리고검정색을띠고있으며, 각물체의불투명도 (opacity) 는각물체옆에기술되어있다. 지금이물체들의색깔을앞에서뒤로가면서 (front-to-back order) over 연산을사용하여합성한다고 ) Figure 2: 색깔합성예 2 할때, Y, R, 그리고 G 물체까지합성하였을때의불투명도값이무엇일지기술하라. (e) ( 바로위문제에이어서 ) 네개의물체모두에대한합성이끝났을때, 최종결과색깔을미리곱한색깔형식으로표현하라. (f) 아래에는투명한물체들을그려주는프로그램의 fragment shader 가주어져있다. 여기서 uniform variable u flag blending 이 0, 1, 또는 2 값을가질경우, 각각합성기능을사용하지않거나, 뒤에서앞으로가면서합성을하거나, 또는앞에서뒤로가면서합성을해주게된다. 또한, 함수 obj c(*,*) 는현재 fragment 에칠할실제색깔 ( 미리곱한색깔이아닌 ) 을계산해주며, 각물체를그리기직전해당하는불투명도값을 uniform variable 인 u frag a 에설정을해주도록되어있다. 만약 u flag blending 값을 1 로설정할경우, 올바른결과를얻기위하여, glblendfunc(*,*) 함수호출시사용할두인자를아래에서찾아순서대로기술하라. GL ZERO, GL ONE, GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (2/9) #version 420. uniform int u flag blending = 0; uniform float u frag a = 1.0f; in vec3 v position EC; in vec3 v normal EC; layout (location = 0) out vec4 f c; vec3 obj c(in vec3 P EC, in vec3 N EC) { vec3 object color;. // Compute the object s color. return object color; void main(void) { vec3 C = obj c(v position EC, normalize(v normal EC)); if (u flag blending == 0) f c = vec4(c, 1.0f); else if (u flag blending == 1) f c = vec4( ( 가 ), ( 나 ) ); else if (u flag blending == 2) f c = vec4( ( 다 ), u frag a); (g) ( 바로위문제에이어 ) 이경우 fragment shader 의 ( 가 ) 와 ( 나 ) 에들어갈내용을 OpenGL Shading Language 의문법에맞게정확히기술하라. (h) 만약 u flag blending 값을 2 로설정할경우, 이프로그램이제대로작동하기위하여, glblendfunc(*,*) 함수호출에필요한두인자를순서대로기술하라. (i) ( 바로위문제에이어 ) 이경우 fragment shader 의 ( 다 ) 에들어갈내용을 OpenGL Shading Language 의문법에맞게정확히기술하라. (j) 다음과같은단순한 fragment shader 를사용하는색깔합성프로그램을고려하자. 차례대로그려주고있다. 이프로그램수행후 A 화소지점에해당하는 color buffer 영역에저장되어있는실제색깔 ( 미리곱한색깔이아닌 ) (R, G, B) 값을기술하라. ( 주의 : RGB 각채널값은 0 과 1 사이의값으로정규화하여답할것 ) void display(void) { gldisable(gl DEPTH TEST); glclearcolor(0.0f, 0.0f, 0.0f, 0.0f); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl SRC ALPHA, GL DST ALPHA); gluseprogram(h ShaderProgram PS); gluniform4f(loc u fragment color, draw Rectangle 2(); 1.0f, 0.0f, 0.0f, 0.5f); gluniform4f(loc u fragment color, draw Rectangle 1(); 1.0f, 0.0f, 0.0f, 0.5f); gluniform4f(loc u fragment color, draw Rectangle 0(); gluseprogram(0); gldisable(gl BLEND); glenable(gl DEPTH TEST); glutswapbuffers(); 0.0f, 0.0f, 1.0f, 1.0f); #version 420 uniform vec4 u fragment color; layout (location = 0) out vec4 final color; void main(void) { final color = u fragment color; 아래의 OpenGL 코드에서는그림 3 에도시한바와같이서로다른영역을가지는세개의사각형을뒤에서앞으로오면서 Figure 3: 세개의사각형영역 (k) ( 바로위문제에이어 ) 이프로그램수행후 B 화소지점에해당하는 color buffer 영역에저장되어있는실제색깔 ( 미리곱한색깔이아닌 ) (R, G, B) 값을기술하라. ( 주의 : RGB 각채널값은 0 과 1 사이의값으로정규화하여답할것 ) (l) 위프로그램에서 blending factor 를설정하
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (3/9) 는부분을다음과같이변경할경우, glblendfunc(gl ONE MINUS DST ALPHA, GL ZERO); 이프로그램수행후 C 화소지점에해당하는 color buffer 영역에저장되어있는실제색깔 ( 미리곱한색깔이아닌 ) (R, G, B) 값을기술하라. ( 주의 : RGB 각채널값은 0 과 1 사이의값으로정규화하여답할것 ) 2. 다음은카메라의설정에관한문제이다. 그림 4 에는 OpenGL Compatibility Profile 에서제공하는 glulookat(*) 함수의호출에대하여뷰잉변환행렬을계산하는과정 ( 이하 이그림 ) 이주어져있으며, 그림 5 에는 glm::lookat() 함수에대한구현코드 ( 이하 이함수 ) 가주어져있는데, 이들을참조하며답하라. Figure 4: glulookat(*) 함수를통한카메라의설정 (a) 이그림에서이함수의인자중의하나인 3 차원벡터 eye 에해당하는기호의이름을기술하라. (b) 이그림의 u, v, 그리고 n 벡터는각각카메라를기준으로오른쪽, 위쪽, 그리고바라보는반대방향에대한단위벡터 (unit vector) 들이다. 이함수의 Line (a) 문장수행후벡터 f 에저장되는값을위의벡터들을사용하여정확히기술하라. (c) 문맥상이함수의 Line (b) 와 Line (c) 문장의 smile(*,*) 함수는두개의 3 차원벡터를인자로받아어떠한계산을해줄까? (d) 이함수의 Line (d) 문장수행결과 4 행 4 열행렬 Result 에는어떤값이저장될까? (e) 문맥상이함수의 Line (e) 와 Line (f) 의빈곳에들어갈내용을이프로그램의문법에맞게정확히기술하라. 3. 이문제는어떤이진트리구조를사용하여이트리에저장되어있는다각형들을주어진카메라시점을기준으로앞에서뒤로가면서정렬한순서로 (in front-to-back order) 그려주는문제에관한것이다. 우선이트리는다음과같이정의된다. typedef struct Polygon { int n v; float *vertex; float *normal; float plane[4]; Polygon; typedef struct TREE { Polygon *polygon; struct TREE *fc, *bc; TREE; (a) 다각형한개에대한정보를저장해주는 Polygon 타입의변수의 plane[4] 필드는나머지세개의변수들에의해정의되는다각형을포함하는평면의식 a x + b y + c z + d = 0의네개의상수 a, b, c, 그리고 d 를순서대로저장하고있는데, 이다각형의법선벡터는이평면의식에반영이되어있다. 만약이다각형이점 (1, 1, 1) 을지나고, 법선벡터가 ( 1 1 3, 3 1, 3 ) 이라면, 배열 plane[4] 에들어갈네개의값을순서대로기술하라. (b) 다음은실제로포인터변수 tree 가가리키는이진트리에저장된다각형들을앞에서기술한순서대로그려주는함수이다. 문맥상이함수의또다른인자 p 는어떤값을저장한배열에대한포인터변수일까? void draw polygons(tree *tree, float *p) { if (tree == NULL) return; if (check side(p, tree->polygon) == TREE FRONT) { draw polygons(tree->fc, p); draw a polygon(tree->polygon); draw polygons(tree->bc, p); else { (A)
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (4/9) namespace glm { template <typename T, precision P> GLM FUNC QUALIFIER tmat4x4<t, P> lookat(tvec3<t, P> const &eye, tvec3<t, P> const ¢er, tvec3<t, P> const &up) { tvec3<t, P> const f(normalize(center - eye)); // Line (a) tvec3<t, P> const s(normalize(smile(f, up))); // Line (b) tvec3<t, P> const u(smile(s, f)); // Line (c) tmat4x4<t, P> Result(1); // Line (d) Result[0][0] = s.x; Result[1][0] = s.y; Result[2][0] = s.z; Result[0][1] = u.x; Result[1][1] = u.y; Result[2][1] = u.z; Result[0][2] = -f.x; Result[1][2] = -f.y; Result[2][2] = -f.z; Result[3][0] = -dot(s, eye); Result[3][1] = ; // Line (e) Result[3][2] = ; // Line (f) return Result; Figure 5: glm::lookat() 함수의구현 (c) 다음은위문제코드의 check side(*,*) 함수에대한코드인데, p가가리키는점이 tree->polygon->plane[4] 가정의하는평면의앞쪽에있으면 TREE FRONT를, 아니면 TREE BACK을리턴해주도록되어있다 ( 편의상이점이평면상에있을경우뒤쪽에있다고가정함 ). 이함수의 (B) 부분에들어갈내용을 C/C++ 문법에맞게정확히기술하라. #define TREE BACK 0 #define TREE FRONT 1 int check side(float *p, Polygon *poly) { if ( (B) ) return TREE FRONT; else return TREE BACK; (d) 앞의코드에서 draw polygons(*,*) 함수가올바르게작동하기위하여 (A) 부분에들어갈내용을 C/C++ 문법에맞게정확히기술하라. (e) 이이진트리에저장되어있는다각형의개 수가 n 이라할때, draw polygons(*,*) 함수의시간복잡도를 Big-O 기호를사용하여기술하라. (f) 이문제에서사용한이진트리의영문이름을기술하라. 4. ( 바로위문제에이어 ) 이번문제도바로앞문제에서사용한이진트리의응용에관한문제이다. 지금가상의 3 차원실내공간을자유롭게돌아다니려하는데, 사용자가벽면을뚫고지나가지못하도록벽면들에대한다각형정보를저장하고있는이이진트리를사용하여다음과같은함수호출을통하여충돌검사를수행하려한다. LOS(tree, A, B); LOS(*,*,*) 함수의목적은 3 차원공간의두점 A 와 B 에의해정의된선분이실내공간의벽면에해당하는임의의다각형과교차를하는지판별하는것인데, 이함수는다음과같이정의할수있다. ===== int LOS(TREE *T, float *s, float *e) { int side s, side e, side f, side b; if (!T) return (A) ; side s = check side(s, T->polygon); side e = check side(e, T->polygon); if ((side s == TREE FRONT) && (side e == TREE FRONT)) {
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (5/9) return LOS( (C) ); else if ((side s == TREE BACK) && (side e == TREE BACK)) { return LOS( (D) ); else { if ( (B) ) return 0; else { side f = LOS(T->fc, s, e); side b = LOS(T->bc, s, e); return (E) ; ===== (a) 이함수는 s 와 e 가가리키는두점을연결한선분이최소한한개의벽면다각형과교차하면 0 을아니면 1 을리턴해주도록설계되어있다. 문맥상이코드의 (A) 에들어갈상수값을기술하라. (b) 문맥상 (B) 부분의조건식은언제 TRUE 값을가지게될지정확히기술하라. (c) 문맥상 (C) 에들어갈내용을 C/C++ 언어문법에맞게정확히기술하라. (d) 문맥상 (D) 에들어갈내용을 C/C++ 언어문법에맞게정확히기술하라. (e) 문맥상 (E) 에들어갈내용을 C/C++ 언어문법에맞게정확히기술하라. 5. 그림 6 은자동차차체모델을기준으로회전변환 R 과이동변환 T 를통하여운전석에카메라를배치한후, 강체변환 M B 를통하여차체를세상좌표계에배치하는모습을도시하고있다. 이때의뷰잉변환행렬 M V 를위의세개의 4 행 4 열행렬을사용하여표현하라. 6. 그림 7(a) 에는두가지형태의퐁의조명모델식이주어져있고, (b)-(d) 에는 OpenGL 시스템에서사용하는기본조명공식이기술되어있다. (a) (a) 의공식에서 H i 를이공식의다른기호를사용하여수학적으로정확히표현하라. (b) (a) 의공식에서 Lambert s cosine law 를표현해주는부분만정확히기술하라. (c) (a) 의공식에서만약평행광원과평행투영을사용할경우, 물체의위치와방향이바뀌었을때영향을받는변수를모두나열하라 (d i 는제외 ). Figure 6: 자동차운전석에대한카메라의배치 (d) (a) 의공식에서카메라에서바라보는방향에직접적으로영향을받는변수를모두나열하라. (e) (a) 의공식에서만약점광원을사용할경우광원의위치의변화에영향을받는변수를모두나열하라. (f) (a) 의공식에서현재퐁의조명모델식이적용되고있는물체표면지점의좌표를 P 라고하자. (b) 의공식에서이 P 에해당하는변수 ( 또는수식 ) 를기술하라. (g) (b) 의공식에서 (a) 의공식의 d i 에해당하는변수 ( 또는수식 ) 를기술하라. (h) (b) 의공식에서 은주어진두벡터 u 와 v 에대하여어떠한값을계산해주는연산자인지정확히기술하라. (i) (b) 의공식에서 0 벡터가아닌임의의벡터 v 에대해 ˆv 는무엇을의미하는가? (j) 정반사방향 (reflection direction), 즉정반사물질이입사광선을가장강하게반사시키는방향을 (b) 공식의변수들을사용하여표현하라. (n VP pli 은양수가가정함 ) (k) (b) 의공식에서정반사로인한하이라이트영역의크기를조절할수있는변수를기술하라. (l) (b) 의공식에서간접조명 (indirect illumination) 효과를 ( 근사적이나마 ) 생성하는데필요한간접적으로들어오는빛, 즉간접적인입사광선과직접적인연관성이있는변수들을모두기술하라. (m) (c) 의공식의조건식 P pli s w 0 이만족되는상황은어떤경우인지정확히기술하라. (n) (d) 의공식에서문맥상 (A) 와 (B) 에공통으로들어갈수식을정확히기술하라.
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (6/9) m 1 I λ = I aλ k aλ + f att (d i ) I li λ {k dλ (N L i ) + k sλ (R i V ) n (1) I λ = I aλ k aλ + i=0 m 1 i=0 f att (d i ) I li λ {k dλ (N L i ) + k sλ (N H i ) n (2) (a) 퐁의조명모델식의두예 c = e cm + a cm a cs + n 1 (att i )(spot i )[a cm a cli + (n VP pli )d cm d cli + (f i )(n ĥi) srm s cm s cli ] i=0 (b) OpenGL 시스템의조명공식 att i = { 1 k 0i + k 1i VP pli + k 2i VP pli, 2 P pli s w 0, 1.0, otherwise (c) 빛의감쇠효과의계산 ( P pli V ŝ dli ) s rli, c rli 180.0 and (A) (B), spot i = 0.0, c rli 180.0 and (A) < (B), 1.0, c rli = 180.0 (d) 스폿광원효과의계산 Figure 7: 조명모델공식예 7. 그림 8 의 OpenGL 렌더링파이프라인을보면서답하라. 이문제의질문은모두 정상적인렌더링과정 을가정한다. ( 어떤지점을지칭할때에는해당상자의기호 ((A) 부터 (I) 까지 ) 를사용할것 ) (a) 이그림에서 out vec3 v position EC; 문장과 in vec3 v position EC; 문장에서정의된동일한이름의두변수간에직접적으로정보가전달되는지점은? (b) 정규화된 3 차원필름 이정의되는좌표계는어느상자와어느상자사이의지점에해당할까? (c) 거리값에기반을둔 은면제거 (hidden surface removal) 계산이수행되는지점은? (d) 화면의윈도우영역중실제로그림이그려지는영역을결정하는계산이수행되는지점은? (e) gldrawarrays(gl TRIANGLES, 0, 900); 문장에서상수 GL TRIANGLES 이가장직접적으로영향을미치는상자의기호는? (f) 비로소 CC (Clip Coordinate) 의꼭지점을 NDC (Normalized Device Coordinate) 의꼭지점으로변환해주는상자의기호는? (g) 꼭지점의좌표를 (x, y, z, w) 라할때보편적인렌더링과정중 w 값이 1 이아닌값을가질수있는지점을모두기술하라. (h) 사용자가설정한카메라의위치와방향정보가반영되는지점은? (i) 보편적인렌더링과정중 mipmapping 과정이가장빈번하게수행되는지점은? (j) Polygonal shading model 중의하나인 Gouraud shading 기법을구현할때, 실제 Phong 의 ilumination model 식이적용되는상자의기호는? (k) glblendfunc(gl SRC ALPHA, GL DST ALPHA); 문장이직접적으로영향을미치는계산이수행되는지점은? (l) 보편적인렌더링과정에서다음기하변환
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (7/9) Figure 8: OpenGL 렌더링파이프라인 행렬과가장관련이높은상자의번호는? cot( fovy ) 2 asp 0 0 0 0 cot( fovy 2 ) 0 0 0 0 f+n f n 0 0 1 0 2nf f n (m) 위의행렬에서 f 값에의해정의되는평면뒤쪽에있는기하물체가화면에서사라지게되는지점은? (n) 삼각형의꼭지점의나열순서를통하여기하물체의일부를제거할수있는지점은? (o) glfrontface(gl CW); 문장이가장직접적으로영향을미치는지점은? (p) 다음그림이암시하는렌더링계산과가장직접적으로관련이있는두상자의기호를기술하라. 8. 다음은텍스춰필터링에관한문제이다. 아래그림을보면서답하라. (a) 레벨 4 의밉맵텍스춰의한텍셀이나타내는영역의면적은레벨 0 의밉맵텍스춰의한텍셀이나타내는영역의면적의몇배일까? (b) 해상도가 512 512 이고각텍셀당 GL UNSIGNED BYTE 와 GL RGBA 형식을사용하는텍스춰이미지에대하여모든가능한레벨에대하여밉맵을구성할경우총몇바이트의텍스춰메모리가필요할까? (c) 그림 9(a) 에서 a 는픽셀에대한원상 (preimage) 의중점을가리키고, b 부터 e 까지는 a 를포함하는주변텍셀의중심점을나타낸다. b, c, d, 그리고 e 지점의텍셀색깔이각각 (1, 1, 1), (1, 0, 0), (1, 1, 0), 그리고 (0, 1, 1) 이라고하자. 각각최근필터와선형필터를사용할경우 a 지점에대하여계산되는색깔은무엇일까? 이그림에서숫자는거리에대한비율을나타내고있음. (d) 그림 9(b) 는확대필터는 GL NEAREST, 그리고축소필터는 GL LINEAR MIPMAP LINEAR 를사용한경우의렌더링결과이다. 과연이그림의상황은축소상황이발생한것인지, 아니면확대상황이발생한것인지구체적으로기술하라. (e) 그림 9(c) 는축소상황이발생한경우이다. 서로다른레벨의밉맵텍스춰에대해서서로다른색깔의텍스춰이미지를사용하였는데, 과연이그림은삼선형필터 (trilinear
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (8/9) b 1 4 e a 3 2 c d (a) 텍셀값의계산 (b) 확대와축소현상 texel pixel preimage (c) 삼선형필터의적용 Figure 9: 텍스춰필터링 interpolation filter) 를사용한결과라할수있는가? 예 / 아니오로답하고그렇게답한이유를밝혀라. 9. 본시험문제지의마지막쪽에는 OpenGL Shading Language (GLSL) 를사용하여가급적그림 7 의퐁의조명모델식에기반을두어퐁쉐이딩방법을구현한버텍스쉐이더와프래그먼트쉐이더프로그램이주어져있다. (a) 보편적인렌더링상황에서, 어떠한조건을만족할경우 5 번문장의행렬의왼쪽 - 위 3 행 3 열행렬과 6 번문장행렬의내용이동일할까? (b) 125 번문장에서 corrected normal EC 벡터를정규화를해주고있는데, ( 정확한계 산을위해서 ) 이과정이필요한이유는무엇일까? (c) OpenGL 렌더링과정중 view volume clipping 계산이수행되는좌표계에서의좌표값을가지는변수를모두기술하라. (d) GPU 의메모리영역에사용자가할당한 Vertex Buffer Object 의데이터와직접적으로연관이있는변수를모두기술하라. (e) 현재처리하고있는광원이점광원인지는어떻게판별하고있는가? (f) 점광원을처리할때광원과쉐이딩하려는지점간의거리가계산이되는문장의번호를기술하라. (g) 평행광원을처리할때빛의감쇠효과는어떻게처리가될까? (h) 그림 7(c) 의 i 번째광원에해당하는 k 2i 값을저장하고있는변수 ( 또는식 ) 를 GLSL 문법에맞게정확히기술하라. (i) 100 번문장시점에서그림 7(a) 의조명공식 (1) 에서사용한벡터 V 값을이쉐이더코드의문맥에서 GLSL 문법에맞게정확히기술하라. (j) 92 번문장의 ( 가 ) 부분에들어갈내용을 GLSL 문법에맞게정확히기술하라. (k) 이쉐이더코드에서는 halfway vector 를사용하여쉐이딩을하고있다. 101 번문장의 ( 나 ) 부분에들어갈수식을 GLSL 문법에맞게정확히기술하라. (l) ( 위문제에이어서 ) 102 문장의 ( 다 ) 부분에들어갈수식을 GLSL 문법에맞게정확히기술하라. (m) 이쉐이더코드의 68 번문장에서 93 번문장의내용중명확히틀린부분이있다. 문장번호와함께틀린부분을명확히밝히고어떻게고쳐야며할지설명하라. (n) 108 문장의 ( 라 ) 부분에들어갈변수나수식을 GLSL 문법에맞게정확히기술하라. (o) 그림 7(b) 의조명식의변수 f i 의사용목적이이쉐이더에서는어떻게달성이되는지관련문장번호를지칭하면서정확히설명하라.