0503기말고사.dvi
|
|
- 현화 손
- 5 years ago
- Views:
Transcription
1 서강대학교공과대학컴퓨터공학과 [CSE4170] 기초컴퓨터그래픽스기말고사 (1/8) [CSE4170] 기초컴퓨터그래픽스 기말고사 담당교수 : 임인성 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. OpenGL 시스템의각좌표계에대한약어는다음과같으며, 답을기술할때필요할경우적절히약어를사용하라. WdC: Window Coordinates EC: Eye Coordinates NDC: Normalized Device Coordinates OC: Object Coordinates MC: Modeling Coordinates CC: Clip Coordinates WC: World Coordinates 아래의그림 1 은본시험전반에걸쳐언급될수있으니해당문제에대하여적절히답하라. (1) vertex stream (2) Vertex Shader (3) vertex stream (4) Primitive Assembly (5) primitive stream (6) Geometry Shader (7) primitive stream (8) Clipping & Setup (9) Rasterization (10) pixel stream (11) Pixel Shader (12) pixel stream (13) Raster Operation (14) Framebuffer Figure 1: 실시간렌더링파이프라인예 1. 그림 1 에주어진실시간렌더링파이프라인의계산과정에대한질문에답하라. (a) (3) 번지점은 OpenGL 좌표계중어떤좌표계에해당할까? (b) 보편적인상황에서모델링변환과뷰잉변환이일어나는단계의번호는? (c) 전통적인 OpenGL 파이프라인에서은면제거, 즉안보이는면이제거되는계산과가장관련이깊은단계의번호는? (d) 꼭지점의좌표에투영변환행렬이곱해지는단계의번호는? (e) 꼭지점의나열순서에따라다각형을제거할수도있는단계의번호는? (f) 버텍스쉐이더의속성데이터가대응되는프래그먼트쉐이더의속성데이터로변환되는단계의번호는? (g) 투영변환행렬이암시하는뷰볼륨의밖에존재하는기하프리미티브들이제거가되는단계의번호는? (h) 다면체모델에대한쉐이딩방법중의하나인퐁쉐이딩방법을구현하려할때, 실제로퐁의조명모델공식의계산이가장자연스럽게수행될수있는단계의번호는? (i) 원근나눗셈과가장관련이깊는단계의번호는? 2. 다음쪽윗부분의그림 2(a) 에는 OpenGL 시스템에서사용하는기본조명공식이주어져있다. (a) 이공식에서 은주어진두벡터에대하여어떠한값을계산해주는연산자인지정확히기술하라. (b) 이공식에서 Lambert 의코사인법칙을표현해주는부분을정확히기술하라. (c) 만약무한관찰자 (infinite viewer) 기능을사용할경우이공식의 ĥi 변수가어떻게정의될지이공식의변수나상수식등을사용하여정확히기술하라 (ˆ 기호의의미를상기할것 ). (d) 만약무한관찰자기능을사용할경우추가적으로어떤조건하에서이조명공식에기반을둔쉐이딩계산을어떻게최적화할수있을까? (e) 무한관찰자기능을사용하지않을경우카메라의위치가바뀌었을때이공식에서직접적으로영향을받는변수 ( 또는식 ) 를모두나열하라 년 6 월 22 일 ( 금 ) 오전 11:00 -
2 서강대학교공과대학컴퓨터공학과 [CSE4170] 기초컴퓨터그래픽스기말고사 (2/8) 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 (a) OpenGL 시스템의조명공식 att i = { 1 k 0i + k 1i VP pli + k 2i VP pli, 2 P pli s w 0, 1.0, otherwise (b) 빛의감쇠효과의계산 ( P pli V ŝ dli ) s rli, c rli & P pli V ŝ dli cos c rli, spot i = 0.0, c rli & P pli V ŝ dli < cos c rli, 1.0, c rli = (c) 스폿광원효과의계산 Figure 2: 2 번문제공식 (f) 점광원을사용할경우광원의위치가바뀌었을때이공식에서직접적으로영향을받을수있는변수 ( 또는식 ) 들을모두나열하라. (g) 렌더링하고자하는물체의위치와방향이모두바뀌었을때이공식에서직접적으로영향을받을수있는변수 ( 또는식 ) 들을모두나열하라. (h) 아래의그림은하이라이트효과의조절모습을도시하고있는데, 이공식의어떤변수를통하여조절할수있을까? (i) 기본적으로퐁의조명모델은광원으로부터직접입사하여물체표면에서반사되는빛의색깔을어떻게계산할지를기술하고있다. 이경우다른물체에반사된후간접적으로들어오는빛을무시함으로써발생하는문제를조금이라도줄이기위하여간접반사를고려하고있다. 이공식에서간접적으로들어오는빛과직접적인연관성이있는변수 ( 또는식 ) 들을모두기술하라. (j) 이공식에서 OpenGL API 함수인 glmaterial{if[v](*, *, *) 함수로설정할수있는변수 ( 또는식 ) 를모두기술하라. (k) 그림 2(b) 의식에서 VP pli 는어떤기하정보에해당하는지정확히기술하라. (l) 그림 2(b) 의식에서조건식 P pli s w 0 이만족되는상황은어떤경우인지정확히기술하라. (m) 그림 2(c) 의식에서두벡터 P pli V 와 ŝ dli 가의미하는방향을정확히기술하라. (n) 그림 2(c) 의식에서조건식 P pli V ŝ dli cos c rli 이만족되는상황은어떤경우인지정확히기술하라. (o) 다면체모델의쉐이딩기법인 Gouraud 쉐이딩방법을적용한다고할때, 보편적으로이조명공식은그림 1 의어느부분에서적용이될지, 가장관련이깊은단계의번호를기술하라. (p) 다면체모델의쉐이딩기법인 Phong 쉐이딩방법을적용한다고할때, 보편적으로이조명공식은그림 1 의어느부분에서적용이될지, 가장관련이깊은단계의번호를기술하라. 3. 다음은색깔혼합에관한문제이다. 두장의이미지 S 와 D 의합성에대하여생각하자. (c S α S ) 와 (c D α D ) 를두이미지의대응되는화소의미리곱한색깔 (pre-multiplied color) 이라할때, 년 6 월 22 일 ( 금 ) 오전 11:00 -
3 서강대학교공과대학컴퓨터공학과 [CSE4170] 기초컴퓨터그래픽스기말고사 (3/8) Figure 3: 색깔합성예 1 (f) 위문제에서모든합성이끝난후결과적으로눈에보이는색깔 C 012 는무엇일지위문제의인자를사용하여정확히기술하라. (g) 아래의프로그램에서함수 test0() 을수행시킬경우그림 5(a) 와같이서로다른색깔로칠해지는여러영역을볼수있는데, 이때 (1) 번영역과 (2) 번영역의 RGB 색깔을정확히기술하라. ( 주의 : RGB 각채널값은 0 과 1 사이의값을가짐 ) α 0 C 0 α 1 C 1 Figure 4: 색깔합성예 2 α 2 =1.0 2 C 두색깔의합성을통하여생성한결과색깔 (c O α O ) 는다음과같이표현할수있다. ( ) ( ) ( ) co cs cd = F α S + F O α D S α D (a) 만약값이 (0.5, 0.5, 0.5, 0.5) 인미리곱한색깔로어떤화소를칠한다고할때, 이는그화소를어떻게칠하는것인지정확히기술하라. (b) 그림 3 에도시한합성연산의경우 F S 와 F D 의값은각각얼마인가? (c) 만약 S over D 연산을적용한다면, 합성후 α O 는어떤값을가질지를 S 와 D 의관련값을사용하여정확히기술하라. (d) 그림 4 와같은상황을생각해보자. 지금관찰자가세개의물체 M 0, M 1, M 2 를바라보고있는데, M 0 는실제색깔이 C 0 인유리로서뒤에서들어오는빛을 1 α 0 의비율로통과시킨다. 한편 M 1 은색깔이 C 1 이고빛을 1 α 1 의비율만큼만통과시키고, 제일오른쪽에있는 M 2 는불투명한벽으로서 C 2 의색깔을가진다. 이때 M 0 와 M 1 을앞에서뒤로가면서 (front-toback order) 합성한다고할때의불투명도 α 01 값이무엇일지정확히기술하라. (e) 바로위문제에서와같이 M 0 와 M 1 을앞에서뒤로가면서합성한다고할때의결과색깔 C 01 값이무엇일지, 위문제의인자를사용하여정확히기술하라. 여기서 C 0, C 1, 그리고 C 01 은미리곱한색깔이아닌원래의 RGB 색깔을의미함. void rect(glfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat R, GLfloat G, GLfloat B, GLfloat A) { glcolor4f(r, G, B, A); glbegin(gl QUADS); glvertex2f(l, b); glvertex2f(r, b); glvertex2f(r, t); glvertex2f(l, t); glend(); void test0(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc(gl SRC ALPHA, GL DST ALPHA); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); rect(0.0, 4.8, -4.8, 2.0, 0.0, 0.0, 1.0, 1.0); gldisable(gl BLEND); void test1(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc((a), (B)); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); gldisable(gl BLEND); (h) 다음함수 test1() 을수행시켰을때그림 5(b) 와같은결과를얻으려면, (A) 와 (B) 에어떤인자값이설정되어야할지, 다음값들중적절한인자를선택하라. ( 여 년 6 월 22 일 ( 금 ) 오전 11:00 -
4 서강대학교공과대학컴퓨터공학과 [CSE4170] 기초컴퓨터그래픽스기말고사 (4/8) (1) (2) x (1) (a) test0() 수행결과 (2) (1) (2) (3) x (b) test1() 수행결과 Figure 5: 색깔의혼합 기서 (1), (2), (3) 번영역의색깔은각각 (0, 0, 0), (1, 0, 0), (0, 1, 0) 임 ) GL ZERO, GL ONE, GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA 4. 다음은 Binary Space Partitioning Tree (BSPT) 에관한문제이다. 다음쪽의그림 6 의코드를보면서아래질문에답하라. (a) 함수 display bspt front to back() 은시점의위치 viewer[3] 가주어졌을때, bspt의다각형들을앞에서뒤로가면서 (front-to-back) 하나씩나열하면서그려주는함수이다. 문맥상 (A) 에들어갈내용을 C 언어문법에맞게기술하라. (b) 문맥상 (B) 와 (C) 에들어갈내용을 C 언어문법에맞게기술하라. (c) 문맥상 (D) 와 (E) 에들어갈내용을 C 언어문법에맞게기술하라. (d) 다음 build bspt() 함수는 plist 가가리키는 npoly 개로구성된다각형리스트를받아들여 BSPT 를구성하여리턴해주는함수이다. 여기서 partition plist() 함수는 plist 에존재하는다각형들을 bspt->poly 에의해정의되는평면의앞쪽과뒤쪽에있는다각형들을분류하여그에해당하는두리스트 fplist 와 bplist 를구성해주는역할을한다. 이때문맥상 (H) 에들어갈내용을 C 언어문법에맞게기술하라. (e) 다음 los() 함수는 3 차원공간의점을나타내는 start 와 end 에의해정의되는선분이 bspt 가저장하고있는임의의다각형과교차하는지아닌지를결정해주는함수로서, 3 차원공간에서의네비게이션에유용하게활용할수있는함수이다. 이함수는문맥상언제 1 값을, 그리고언제 0 값을리턴하는지정확히기술하라. (f) 문맥상 los() 함수내의 SOGANG() 함수는특정다각형 bspt->poly 와두지점의위치 start 와 end 에대한정보가주어졌을때, 정확히어떤경우에 NULL 이아닌값을리턴해주는함수일지정확히기술하라. (g) 문맥상 los() 함수에서 (F) 와 (G) 에들어갈내용을 C 언어문법에맞게기술하라. (h) 문맥상 los() 함수에서내용적으로크게잘못된부분을지적하고옳게고쳐라. 5. 다음은 OpenGL ES 2.0 Shading Language 를사용한 Gouraud 쉐이딩방법의구현에관한문제이다. 본시험문제의마지막두쪽에는해당버텍스쉐이더의구현예가주어져있는데, 쉐이딩계산을위하여버텍스쉐이더에입력된꼭지점과법선벡터정보를 EC 로변환하여퐁의조명모델공식을적용하고있다. (a) 문맥상 EC 로변환된꼭지점의좌표를저장하고있는변수이름을기술하라. (b) 이버텍스쉐이더의계산결과로산출되는결과정보를저장해주는변수들을모두기술하라 년 6 월 22 일 ( 금 ) 오전 11:00 -
5 서강대학교공과대학컴퓨터공학과 [CSE4170] 기초컴퓨터그래픽스기말고사 (5/8) typedef struct bspt { // data structure for bspt Polygon *poly; struct bspt *fchild; // for the front side struct bspt *bchild; // for the back side BSPT; BSPT *build bspt(int npoly, PLIST *plist) { int fnpoly, bnpoly; PLIST *fplist, *bplist; BSPT *bspt; if (npoly == 0) return NULL; bspt = (BSPT *) malloc(sizeof(bspt)); bspt->poly = pick poly(&npoly, &plist); totalpolygon++; fnpoly = bnpoly = 0; fplist = bplist = NULL; partition plist(bspt->poly, npoly, plist, &fnpoly, &fplist, &bnpoly, &bplist); (H) return bspt; void display bspt front to back(bspt *bspt, float *viewer) { int viewer side; if ( (A) ) return; viewer side = check side(viewer, bspt->poly); if (viewer side == BSPT FRONT) { display bspt front to back( (B), viewer); draw bspt poly(bspt->poly); display bspt front to back( (C), viewer); else { display bspt front to back( (D), viewer); draw bspt poly(bspt->poly); display bspt front to back( (E), viewer); int los(bspt *bspt, float *start, float *end) { int cs, ce, side0, side1; if (!bspt) return 1; cs = check side(start, bspt->poly); ce = check side(end, bspt->poly); if ((cs == BSPT FRONT) && (ce == BSPT FRONT)) { return los(bspt->fchild, start, end); else if ((cs == BSPT BACK) && (ce == BSPT BACK)) { return los(bspt->bchild, start, end); else { if (SOGANG(bspt->poly, start, end)) return 0; side0 = los( (F), start, end); side1 = los( (G), start, end); return side0 side1; Figure 6: BSPT 관련함수 년 6 월 22 일 ( 금 ) 오전 11:00 -
6 서강대학교공과대학컴퓨터공학과 [CSE4170] 기초컴퓨터그래픽스기말고사 (6/8) (c) 다음은 Direct3D 의쉐이더인 HLSL Shader 에대한설명의일부이다. As a minimum, a vertex shader must output vertex position in homogeneous clip space. 이버텍스쉐이더코드에서이설명과가장밀접한연관이있는한문장의번호를기술하라. (d) 37) 번의조건문문장에서이조건이성립한다는것은무엇을뜻할까? (e) 문맥상그림 2(a) 의조명공식에서 57) 번문장의 max(c zero, dot(n, L)) 함수값에해당하는변수 ( 또는식 ) 을정확히기술하라. (f) EC 에서카메라의기준점인눈에해당하는점의좌표는? (g) 59) 번문장의 -normalize(p eye).xyz 변수는 EC 에서어느지점에서어느지점을향한벡터의길이를 1 로만들어준단위벡터를나타낸다. 과연어느지점에서어느지점일까? (h) 문맥상 59) 번문장의 X 변수값에저장되는내용을통칭무엇이라고부르는가? (i) 문맥상그림 2(a) 의조명공식에서 55) 번문장수행시 att factor 변수가저장하고있는값과가장밀접한관련이있는변수 ( 또는식 ) 을정확히기술하라. ii. 올바른변환을위하여 cam.mat 이저장해야할 4 행 4 열변환행렬의내용을정확히기술하라. (c) 그림 1 에서본카메라조작과정과가장관련이있는단계의번호를기술하라. 수고많았습니다 6. 다음은카메라의조작에관한문제이다. (a) 초기상태의카메라프레임이눈좌표계의좌표축과일치되어있는상태에서, 카메라프레임에대하여 M 1 M 2 M 3 순서로변환을하였다면, 그경우뷰잉변환행렬 M V 는무엇인지기술하라. (b) 초기상태 C 0 = (e, u, v, n) = ((0 0 0), (1 0 0), (0 1 0), (0 0 1)) 인카메라를사용자의조작을통하여 C 1 = (( ), (0 0 1), (0 1 0), ( 1 0 0)) 와같은상태로변환하는상황을아래와같은뷰잉변환코드로구현한다고가정하자. glmatrixmode(gl MODELVIEW); glloadidentity(); glmultmatrixf(cam.mat); gltranslatef( (A), (B), (C) ); i. 이때 (A), (B), (C) 에들어갈내용을기술하라 년 6 월 22 일 ( 금 ) 오전 11:00 -
7 1) attribute vec4 a_position; 2) attribute vec3 a_normal; 3) attribute vec2 a_texture; vs_gs_simplelight_wc_prob.txt 4) uniform mat4 mvp_matrix; 5) uniform mat4 modelview_matrix; 6) uniform mat4 inv_modelview_matrix; 7) uniform float rescale_normal_factor; 8) uniform vec4 material_ambient; 9) uniform vec4 material_diffuse; 10) uniform vec4 material_specular; 11) uniform float material_specular_exponent; 12) uniform vec4 light_position; 13) uniform vec4 light_ambient; 14) uniform vec4 light_diffuse; 15) uniform vec4 light_specular; 16) uniform vec3 spot_direction; 17) uniform float spot_exponent; 18) uniform float spot_cutoff_angle; 19) uniform vec4 global_ambient; 20) varying vec4 v_color; 21) varying vec2 v_texture; 22) const float c_zero = 0.0; 23) const float c_one = 1.0; 24) vec4 p_eye; 25) vec3 N; 26) vec4 lighting_equation() { 27) vec4 computed_color = vec4( c_zero, c_zero, c_zero, c_zero ); 28) vec3 X; 29) float ndotl; 30) float ndotx; 31) float att_factor; 32) float spot_factor; 33) vec3 att_dist; 34) vec3 L; 35) att_factor = c_one; 36) computed_color += material_ambient * global_ambient; 37) if ( light_position.w!= c_zero ) { // spot light 38) L = light_position.xyz - p_eye.xyz; 39) L = normalize(l); 40) if( spot_cutoff_angle < ) { 41) vec3 spot_dir = normalize(spot_direction); 42) spot_factor = dot( -L, spot_dir ); 43) if( spot_factor >= cos(radians( spot_cutoff_angle) ) ) { 44) spot_factor = pow(spot_factor, spot_exponent ); 45) 46) else { 47) spot_factor = c_zero; 48) 49) att_factor *= spot_factor; 49) 50) 51) else { 52) L = light_position.xyz; 53) L = normalize(l); 54) 55) if ( att_factor > c_zero ) { 56) computed_color += light_ambient * material_ambient; 57) ndotl = max(c_zero,dot(n, L )); 1 페이지
8 vs_gs_simplelight_wc_prob.txt 58) computed_color += ( ndotl * light_diffuse * material_diffuse ); 59) X = normalize( L - normalize(p_eye).xyz); 60) ndotx = dot( N, X ); 60) if ( ndotx > c_zero ) { 61) computed_color += (pow ( ndotx, material_specular_exponent) 62) * material_specular * light_specular ); 63) 64) computed_color *= att_factor; 65) 66) return computed_color; 67) 68) void main() { 69) p_eye = modelview_matrix * a_position; 70) N = normalize( inv_modelview_matrix * vec4( a_normal, c_zero) ).xyz; 71) v_color = lighting_equation(); 72) v_texture = a_texture; 73) gl_position = mvp_matrix * a_position; 74) 2 페이지
9 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/6) 기초컴퓨터그래픽스기말고사 (CSE4170) 담당교수 : 임인성 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 1. 다음은 BSP TREE FREQUENTLY ASKED QUESTIONS (FAQ) 에기술되어있는 Binary Space Partitioning Tree (BSPT) 에관한프로그램의일부이다 ( 수업시간에다룬내용과약간다를수있음 ). struct BSP tree { plane partition; list polygons; BSP tree *front, *back; ; void Build BSP Tree(BSP tree *tree, list polygons) { polygon *root = polygons.get From List(); tree->partition = root->get Plane(); tree->polygons.add To List(root); list front list, back list; polygon *poly; while ((poly = polygons.get From List())!= 0) { int result = tree->partition.aaa(poly); // (1) switch (result) { case COINCIDENT: tree->polygons.add To List(poly); break; case IN BACK OF: backlist.add To List(poly); break; case IN FRONT OF: frontlist.add To List(poly); break; case SPANNING: polygon *front piece, *back piece; BBB(poly, tree->partition, // (2) front piece, back piece); backlist.add To List(back piece); frontlist.add To List(front piece); break; if (!front list.is Empty List()) { tree->front = new BSP tree; Build BSP Tree(, ); // (3-a) if (!back list.is Empty List()) { tree->back = new BSP tree; Build BSP Tree(, ); // (3-b) void Draw BSP Tree(BSP tree *tree, point eye) { float result = tree->partition.ccc(eye); if (result > 0) { Draw BSP Tree(tree->back, eye); tree->polygons.draw Polygon List(); Draw BSP Tree(tree->front, eye); else if (result < 0) { Draw BSP Tree(, eye); // (4-a) tree->polygons.draw Polygon List(); Draw BSP Tree(, eye); // (4-b) else { Draw BSP Tree(tree->back, eye); Draw BSP Tree(tree->front, eye); (a) 문맥상 struct BSP tree 의 partition 은네개의 float 타입의값으로구성된구조체타입의변수라할수있다. 이네개의값은무엇을나타낼까? (b) 위의 Build BSP Tree() 는다각형리스트 polygons 를넘겨받아적절히 BSPT *tree 를구축해주는함수이다. 문맥상 (1) 번라인의 AAA() 함수는주어진 tree->partition 과 poly 에대해어떤일을해주는지정확히기술하라. (c) 문맥상 (2) 번라인의 BBB() 는어떤일을해주는함수인지, 어떤정보를받아들여어떤정보를넘겨주는지정확히기술하라. (d) 문맥상 (3-a) 와 (3-b) 번라인의빈곳에들어갈내용을정확히기술하라. (e) 위의 Draw BSP Tree() 는 *tree 에저장되어있는다각형들을시점 eye 에대해뒤에서앞으로가면서 (back-to-front order) 년 6 월 15 일 ( 수 ) 오후 3:00 -
10 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (2/6) 나열해주는함수이다. 첫문장에서호출되는 CCC() 함수는문맥상주어진변수 tree->partition 과점 eye 에대해어떤경우에각각양수, 음수, 그리고 0 을리턴해줄까? (f) 문맥상 (4-a) 와 (4-b) 라인의빈곳에들어갈내용을정확히기술하라. (g) 위의코드에서문맥상잘못된부분을지적하고올바르게고쳐라. 2. 다음도 BSPT 의응용에관한문제이다. 지금가상의 3 차원실내공간을자유롭게돌아다니려하는데, 사용자가벽면을뚫고지나가지못하도록 BSPT 를사용하여충돌검사를하려한다. 지금모든벽면이사각형으로모델링이되어있는데, 이사각형들을사용하여구성한 BSPT TREE 에대해아래와같은함수를호출하려한다. LOS(TREE, A, B); 이때원하는것은 3 차원공간의두점 A 와 B 에의해정의된선분이실내공간의임의의벽면에해당하는사각형과교차를하는지알아내는것인데, 이작업은아래의코드로수행할수있다. 참고로이문제에서 BSPT 타입은다음과같이정의되어있음. typedef struct BSPT { Polygon *poly; struct BSPT *fchild; struct BSPT *bchild; BSPT; int LOS(BSPT *T, float *start, float *end) { int side s, side e, side f, side b; if (!T) return 1; side s = check(start,t->poly); side e = check(end,t->poly); if ((side s == BSPT FRONT) && (side e == BSPT FRONT)) { return LOS( (A) ); else if ((side s == BSPT BACK) && (side e == BSPT BACK)) { return LOS( (B) ); else { if (intersect(t->poly, start, end)) return 0; else { side f = LOS(T->fchild, start, end); side b = LOS(T->bchild, start, end); return (C) ; (a) 이함수는 0 또는 1 값을리턴하도록되어있는데, 문맥상언제 0 값을, 그리고언제 1 값을리턴하는지정확히기술하라. (b) 문맥상 check() 함수가하는일이무엇인지정확히기술하라. (c) 문맥상 (A) 와 (B) 에들어갈내용을 C 언어문법에맞게정확히기술하라. (d) 문맥상 (C) 에들어갈내용을 C 언어문법에맞게정확히기술하라. 3. 다음은 OpenGL ES 2.0 Shading Language 를사용한퐁쉐이딩 (Phong Shading) 의구현에관한문제이다. 아래에주어진버텍스쉐이더 (vertex shader) 및프래그먼트쉐이더 (fragment shader) 코드를보면서답하라. 참고로이문제에서는원근투영과점광원을사용하고있음. static const char* VertexShader = STRINGIFY( attribute vec4 Position; attribute vec3 Normal; uniform mat4 Projection; uniform mat4 Modelview; uniform float Alpha; varying vec3 X; varying vec3 Y; void main(void) { X = (Modelview * Position).xyz; Y = normalize((modelview * vec4(normal, 0.0) * Alpha).xyz); gl Position = Projection * Modelview * Position; ); static const char* FragmentShader = STRINGIFY( precision mediump float; varying vec3 X; varying vec3 Y; 년 6 월 15 일 ( 수 ) 오후 3:00 -
11 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (3/6) uniform vec4 AmbientGlobal; uniform vec4 DiffuseMaterial; uniform vec4 AmbientMaterial; uniform vec4 SpecularMaterial; uniform float Shininess; uniform vec4 LightPosition; uniform vec4 AmbientLight; uniform vec4 DiffSpecLight; void main(void) { vec4 color = AmbientGlobal * AmbientMaterial; ); vec3 N = normalize(y); // (1) vec3 L = normalize(lightposition.xyz - X); float NdotL = dot(n, L); if( NdotL > 0.0 ) { // (2) color += AmbientMaterial * AmbientLight; vec3 What1 = normalize(-x); // (3) vec3 What2 = normalize(l + What1); // (4) float NdotWhat2 = max(dot(n, What2), 0.0); vec4 diffuse = DiffuseMaterial * NdotL; vec4 specular = SpecularMaterial * pow(ndotwhat2, Shininess); gl FragColor = color + DiffSpecLight *(5); else { gl FragColor = color; (a) 위쉐이더를사용하면렌더링하고자하는물체표면의어떤지점들에대해쉐이딩계산이일어난다고할수있을까? (b) 또한문맥상 OpenGL 의어떤좌표계에서쉐이딩계산이수행될까? OC,MC, WdC, CC, NDC, EC, WC 등의기호를사용하여답하라. (c) 버텍스쉐이더의출력변수인 varying 변수 X 와 Y 에저장된값이렌더링파이프라인의어느시점에서, 그리고어떻게프래그먼트쉐이더의입력변수인 varying 변수 X 와 Y 값으로변환이되는지정확히기술하라. (d) 한점 p 를 4 행 4 열행렬 M 이나타내는아핀변환을통해기하변환을한다고하자. p 에서의법선벡터 (normal vector) n 에대해동일한아핀변환을가하려면, n 에어떤행렬을곱해야할지 M 또는 M 의내용을적절히사용하여표현하라 ( 힌트 : 본시험문제에서 A 3 3 은 4 행 4 열행렬 A 의왼쪽 - 위 3 행 3 열부행렬을나타냄 ). (e) 이문제의예제프로그램에서사용하는모델링변환과뷰잉변환은이동변환 T, T1, 회전변환 R, R1, 그리고각축방향으로 s 배확대해주는크기변환 S(s) 에대해다음과같다. M M = R S(s) R1 T1, M V = T 모델뷰행렬 M MV = M V M M 에대해 (((M MV ) 3 3 ) 1 ) t 는다음과같이세개의행렬의곱으로표현할수있는데, 이때행렬 B 와 C 의내용을정확히기술하라. (((M MV ) 3 3 ) 1 ) t = B S( 1 s ) C (f) (((M MV ) 3 3 ) 1 ) t 을크기변환인자값 s 와 M MV 의내용을적절히사용하여표현하라. (g) 위버텍스쉐이더에서문맥상 uniform 변수인 Alpha 에는어떤값이담겨져올까? (h) 다음은 Direct3D 의쉐이더인 HLSL Shader 에대한설명의일부이다. As a minimum, a vertex shader must output vertex position in homogeneous clip space. 위의쉐이더프로그램에서이설명과가장밀접한연관이있는한문장을기술하라. (i) 위버텍스쉐이더는약각비효율적으로작성되어있다. 이쉐이더를어떻게고치면좀더효율적으로렌더링계산을수행할수있을까? (j) (1) 번문장은 Y 벡터의길이를 1 로만들어주고있다. 만약이문장을제거하면렌더링결과에많은차이가있는지, 예 / 아니오 로답하고그이유를정확히설명하라. (k) (2) 번문장의 if 문은어떠한경우에지역조명모델식을적용하지않겠다는것인지정확히기술하라. (l) 만약 (2) 번문장의 if 문을제거해도제거전과동일하게쉐이딩이될지, 예 / 아니오 로답하고그이유를정확히기술하라. (m) (3) 번문장의 What1 변수에는정확히어떤지점에서어느방향을가리키는벡터가저장이될까? (n) (4) 번문장의 What2 변수가저장하는벡터를통칭무엇이라고하는가? 년 6 월 15 일 ( 수 ) 오후 3:00 -
12 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (4/6) (o) 문맥상 (5) 번에들어갈내용을정확한쉐이더문법을사용하여기술하라. (p) 아래그림은위의쉐이더프로그램에서어떤특정변수값을바꾸어가며조절한렌더링효과를보여주고있다. 과연어떤변수인지정확히기술하라. 5. 다음그림은몇년전에발표된어떤 GPU (Graphics Processing Unit) 의렌더링계산구조를도시하고있다. 각문제에대해가장연관성이높은파이프라인부분의이름을 A, B, C, D, 그리고 E 중의하나로기술하라. A 4. 다음의퐁의조명모델 (Phong s illumination model) 식을보고답하라. D B C I λ = I aλ k aλ m 1 + f att (d i ) I li λ {k dλ (N L i ) i=0 +k sλ (N H i ) n (a) 변수 I aλ, k aλ, d i, I li λ, k dλ, N, L i, k sλ, H i, n 중카메라의위치에영향을받는변수를모두나열하라. (b) 물체의위치와방향이바뀌었을때영향을받는변수를모두나열하라. (c) Lambert 의코사인법칙을표현해주는부분을정확히기술하라. (d) 광원의위치변화에영향을받는변수를모두나열하라. (e) H i 는어떤상황에서특히효율적으로사용이되는가? 두가지조건을명시하라. (f) 플랫쉐이딩 (flat shading), 퐁쉐이딩, 그리고고우러드쉐이딩 (Gouraud shading) 등세가지방법을계산량이적은것부터순서대로나열하라. (g) f att (d i ) 에서 d i 는 i 번째광원에대해어떤값을나타내는변수인지, 그리고이함수는어떤효과를나타내기위한것인지정확히기술하라. (h) 위문제에주어진 fragment shader 에서 I li λ 값과가장밀접한관계가있는 uniform 변수값을기술하라. (i) 앞문제에주어진프래그먼트쉐이더는한개의광원만 ( 즉 m = 1) 고려하고있는데, 이문제에주어진식과이쉐이더에서사용하는조명모델의가장큰차이를기술하라 (f att (d i ) 부분제외 ). E (a) 쉐이더를통하여퐁쉐이딩을구현할때, 퐁의조명모델이적용되는부분은? (b) 꼭지점의나열순서에따라다각형을제거할수도있는부분은? (c) 필터링방법중의하나인밉매핑 (mipmapping) 과가장밀접한관계가있는부분은? (d) OpenGL 의 glblendfunc() 함수가직접적으로영향을미치는부분은? (e) 실제로은면제거 (hidden surface elimination) 계산이수행되는부분은? (f) 카메라를기준으로하는좌표계가존재하는부분은? (g) 일반적으로 hierarchical modeling 과가장관계가깊은부분은? (h) 버텍스쉐이더의속성데이터가프래그먼트쉐이더의속성데이터로변환되는부분은? (i) 원근나눗셈연산이수행되는부분은? (j) OpenGL 의 gluperspective() 함수로설정한뷰볼륨의밖에존재하는기하프리미티브 (geometric primitive) 들이제거가되는부분은? 년 6 월 15 일 ( 수 ) 오후 3:00 -
13 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (5/6) (k) 정상적인원근투영변환을할때, 꼭지점의동차좌표의 W 좌표값이 1 이아닌값이나타날수있는부분은? (l) 뷰폿변환과가장밀접한관련이있는부분은? (m) 꼭지점들이기하프리미티브들로조립되는부분은? 6. 다음은광원의설정에관한문제이다. (a) 지금광부들이사용하는헤드라이트와같이카메라에고정된점광원을사용하려한다. 만약광원을항상카메라의기준점에서위로 5.0 만큼떨어진곳에위치시키려하면, 아래의코드에서 gllightfv(gl LIGHT0, GL POSITION, li pos); 문장을정확히몇번라인과몇번라인사이에삽입해야하는지, 그리고그때 (A), (B), (C), (D) 에들어갈내용은무엇인지기술하라. GLfloat li pos[4] = { (A), (B), (C), (D) ; // (1). glmatrixmode(gl MODELVIEW); // (2) glloadidentity(); // (3) // Do viewing transform. glulookat(v[0], v[1], v[2], c[0], c[1], c[2], 0.0, 1.0, 0.0); // (4) glpushmatrix(); // (5) // Do modeling transform. glrotatef(45.0, 0.0, 1.0, 0.0); // (6) gltranslatef(-2.5, 0.5, -9.5); // (7) draw object in MC(); // (8) glpopmatrix(); // (9) (b) 만약광원을세상좌표계의 (3.0, 0.5, -1.5) 인지점에고정시킨후렌더링을하려할경우에대해위문제를풀어라. (c) 만약광원을 (8) 번라인에서그리고있는물체의모델링좌표계의 (3.0, 0.5, -1.5) 지점에고정시킨후, 렌더링을하려할경우에대해위문제를풀어라. 7. 다음은 OpenGL 환경에서의텍스춰필터링에관한문제이다. 아래그림을보면서답하라. (a) 레벨 0 ( 최고해상도 ) 의밉맵 (mipmap) 텍스춰의한텍셀이나타내는영역의면적은레벨 3 의밉맵텍스춰의한텍셀이나타내는영역의면적의몇배일까? (b) 첫번째그림에서 a 는픽셀에대한원상 (pre-image) 의중점을가리키고, b 부터 e 까지는 a 를포함하는주변텍셀의중심점을나타낸다. b, c, d, 그리고 e 지점의텍셀색깔이각각 (1,1,1), (1,0,0), (1,1,0), 그리고 (0,1,1) 이라고하자. 이때선형필터 (GL LINEAR) 를사용할경우 a 지점에대해계산되는색깔은무엇일까? 반드시계산과정을밝혀라 ( 이그림에서숫자는거리에대한비율을나타냄 ). (c) 두번째그림은축소필터로 GL LINEAR 를, 확대필터로는 GL NEAREST 를사용한경우의렌더링결과이다. 지금축소및확대두필터가동시에적용이되고있는데, 과연이러한상황에는왼쪽과오른쪽부분에각각어떤필터가적용되고있을까? 그리고그이유는무엇일까? 년 6 월 15 일 ( 수 ) 오후 3:00 -
14 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (6/6)! " (d) 세번째그림은축소상황이발생한경우이다. 서로다른레벨의밉맵텍스춰에대해서서로다른색깔의텍스춰이미지를로드한후, 축소필터로 GL LINEAR MIPMAP NEAREST 를사용한결과인데, 만약이축소필터대신에 GL LINEAR MIPMAP LINEAR 를사용할경우렌더링결과가어떻게달라질까? 8. 다음은배열 p[*][*] 에저장된,y w 축에수직인평면상의경로를따라움직이는자동차에서바라본세상을렌더링해주는코드의일부이다. void set up rot mat(float *m, float *minv, int i) { GLfloat u[3], v[3], n[3]; v[0] = ; // (1) if (i == 0) { u[0] = p[0][0] - p[1][0]; u[1] = p[0][1] - p[1][1]; u[2] = p[0][2] - p[1][2]; else { u[0] = p[i-1][0] - p[i][0]; u[1] = p[i-1][1] - p[i][1]; u[2] = p[i-1][2] - p[i][2]; normalize vec3(u); cross prod vec3(u, v, n); m[0] = ; m[15] = 1.0; minv[0] = ; minv[15] = 1.0; void dispaly(void) { GLfloat m[16], minv[16]; glclear(gl COLOR BUFFER BIT); set up rot mat(m, minv, cur i); glpushmatrix(); gltranslatef(p[c i][0], 4.89, p[c i][2]); glmultmatrixf(m); draw car(); glpopmatrix(); glutswapbuffers(); (a) (1) 번문장에서 v 벡터의값 v[0], v[1], v[2] 의값을설정하고있는데, 각원소값은문맥상어떤값으로설정되어야할까? 세상좌표계와자동차몸체의모델링좌표계모두위쪽이 y 축방향에해당함. (b) 문맥상 set up rot mat() 함수안에서배열 m 과 minv 의값을설정하고있는데, m[4] 와 minv[4] 에저장되어야하는각값을 C 언어문법에맞게기술하라. OpenGL 에서의기하변환행렬원소의저장순서를고려할것. (c) 이쪽의위에있는그림은자동차몸체의모델링좌표계상에서운전석에카메라를배치하는과정을보여주고있다. 만약자동차를세상에배치한후, 이카메라에서세상을바라보는장면을렌더링할때의뷰잉변환행렬 M V 를기본변환행렬 T(x,y,z) ( 이동변환 ), S(x,y,z) ( 크기변환 ), R(angle,x,y,z) ( 회전변환 ) 이나이프로그램의변수 m 과 minv 가나타내는 M m 과 M minv 등의곱으로표현하라. (d) 지금운전석에배치한카메라를사용하여렌더링한다고가정할때, display() 함수의 (2) 에들어갈뷰잉변환코드를 OpenGL 함수들을적절히사용하여 C 언어문법에맞게정확히기술하라 ( 힌트 : 카메라프레임은자동차몸체를세상좌표계에배치할때같이움직임 ). glmatrixmode(gl MODELVIEW); glloadidentity(); (2) draw axes(); draw path(); 끝 년 6 월 15 일 ( 수 ) 오후 3:00 -
15 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/8) 기초컴퓨터그래픽스기말고사 (CSE4170) 담당교수 : 임인성 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 1. 아래그림 1에주어진실시간 3D 렌더링파이프라인의계산과정에대한질문에답하라. (1) vertex stream (2) Vertex Shader (3) vertex stream (4) Primitive Assembly (5) primitive stream (6) Geometry Shader (7) primitive stream (8) Clipping & Setup (9) Rasterization (10) pixel stream (11) Pixel Shader (12) pixel stream (13) Raster Operation (14) Framebuffer 그림 1: 실시간렌더링계산과정예 (a) OpenGL 파이프라인에서의색깔혼합 (color blending) 계산과가장관련이깊은단계의번호는? (b) OC, MC, WC, EC, CC, NDC, WdC 등의 OpenGL 좌표계중 (3) 번시점은어떤좌표계에해당할까? (c) 뷰폿변환과가장밀접한관련이있는단계의번호는? (d) 모델링변환과뷰잉변환이일어나는단계에해당하는번호는? (e) 전통적인 OpenGL 파이프라인 에서은면제거, 즉안보이는면이제거되는계산과가장관련이깊은단계의번호는? (f) 다면체모델에대한쉐이딩방법중의하나인퐁쉐이딩방법을구현하려할때, 실제로퐁의조명모델식의계산이가장자연스럽게수행될수있는단계에해당하는번호는? (g) 꼭지점의좌표에투영변환행렬이곱해지는단계에해당하는번호는? (h) 삼각형의꼭지점에설정된여러속성들이픽셀들에대한속성으로바뀌는단계에해당하는번호는? 2. 다음의 2차원기하변환에관한프로그램을보고답하라. int iii = 0; void display(void) { glclear(gl COLOR BUFFER BIT); glmatrixmode(gl MODELVIEW); glpushmatrix(); glrotatef(iii*90.0, 0.0, 0.0, 1.0); gltranslatef(-250.0, , 0.0); glbegin(gl TRIANGLES); glvertex2f(500.0, 0.0); glvertex2f(500.0, 500.0); glvertex2f(0.0, 500.0); glend(); glpopmatrix(); glflush(); void sogang(int button, int state, int x, int y) { if ((button == GLUT LEFT BUTTON) && 년 6 월 16 일 ( 수 ) 오후 6:00 -
16 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (2/8) 그림 2: OpenGL 을사용한 2 차원기하변환 (state == GLUT DOWN)) iii = (iii+1)%4; glutpostredisplay(); void university(int width, int height) { glviewport(0, 0, width, height); glmatrixmode(gl PROJECTION); glloadidentity(); glortho(0.0, (double) width, 0.0, (double) height, -1.0, 1.0); glutpostredisplay(); void OpenGLInitandRegisterCallback(void) { glclearcolor(1.0, 1.0, 1.0, 1.0); glpolygonmode(gl FRONT AND BACK, GL FILL); glcolor3f(1.0, 0.0, 0.0); glutdisplayfunc(display); glutreshapefunc(university); glutmousefunc(sogang); void main (int argc, char **argv) { glutinit(&argc, argv); glutinitdisplaymode(glut RGBA); glutinitwindowsize(500, 500); glutcreatewindow("midterm Problem"); OpenGLInitandRegisterCallback(); glutmainloop(); (a) 사용자가왼쪽마우스버튼을누를때마다화면의그림이어떤식으로순환하는지, 그림 2와같은방식으로그려라. 도형의모양과위치를가급적정확히표시하고어떤부분이적색영역인지분명히밝힐것. (b) 만약그림 2에도시한방식으로화면이바뀌도록하려면이프로그램을어떻게수정해야하는가? 어느함수의어떤문장과어떤문장사이에어떤문장 ( 들 ) 을삽입함 과같이표시하고, 삽입할문장 ( 들 ) 을 OpenGL 함수들을적절히사용하여 C언어문법에맞게정확히기술하라. (c) 원래의프로그램상태에서 university() 함수의 glortho() 함수문장을아래와같이수정할경우화면의내용이어떻게반복될지, 그림 2와같은방식으로그려라. glortho(0.0, width/2.0, 0.0, height/2.0, -1.0, 1.0); (d) 원래의프로그램상태에서 university() 함수의 glortho() 함수문장직전에아래와같은문장을삽입할경우화면의내용이어떻게반복될지, 그림 2와같은방식으로그려라. glscalef(0.5, 0.5, 1.0); ( 힌트 : 앞문제의직교투영변환을잘생각해보고, 이크기변환이직교투영에어 년 6 월 16 일 ( 수 ) 오후 6:00 -
17 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (3/8) S D 그림 3: 색깔합성예 1 0 C 0 1 C C 떤영향을미치는지를생각해볼것 ) 3. 다음은색깔혼합에관한문제이다. 두장의이미지 S와 D의합성에대하여생각하자. (c S α S ) 와 (c D α D ) 를두이미지의대응되는화소의미리곱한색깔 (pre-multiplied color) 이라할때, 두색깔의합성을통하여생성한결과색깔 (c O α O ) 는다음과같이표현할수있다. c O = F S c S + F D c D α O α S α D (a) 만약값이 (0.5, 0.5, 0.5, 0.5) 인미리곱한색깔로어떤화소를칠한다고할때, 이는그화소를어떻게칠하는것인지정확히기술하라. (b) 그림 3에도시한합성연산의경우 F S 와 F D 의값은각각얼마인가? (c) 만약 S over D 연산을적용한다면, 합성후 α O 는어떤값을가질지를 S와 D의관련값을사용하여정확히기술하라. (d) 그림 4와같은상황을생각해보자. 지금관찰자가세개의물체 M 0, M 1, M 2 를바라보고있는데, M 0 는실제색깔이 C 0 인유리로서뒤에서들어오는빛을 1 α 0 의비율로통과시킨다. 한편 M 1 은색깔이 C 1 이고빛을 1 α 1 의비율만큼만통과시키고, 제일오른쪽에있는 M 2 는불투명한벽으로서 C 2 의색깔을가진다. 이때 M 0 와 M 1 을앞에서뒤로가면서 (front-toback order) 합성한다고할때의불투명도 α 01 값이무엇일지정확히기술하라. 그림 4: 색깔합성예 2 (e) 바로위문제에서와같이 M 0 와 M 1 을앞에서뒤로가면서합성한다고할때의결과색깔 C 01 값이무엇일지, 위문제의인자를사용하여정확히기술하라. 여기서 C 0, C 1, 그리고 C 01 은미리곱한색깔이아닌원래의 RGB 색깔을의미함. (f) 위문제에서모든합성이끝난후결과적으로눈에보이는색깔 C 012 는무엇일지위문제의인자를사용하여정확히기술하라. (g) 아래의프로그램에서함수 test0() 을수행시킬경우그림 5(a) 와같이서로다른색깔로칠해지는여러영역을볼수있는데, 이때 (1) 번영역과 (2) 번영역의 RGB 색깔을정확히기술하라. ( 주의 : RGB 각채널값은 0과 1 사이의값을가짐 ) void rect(glfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat R, GLfloat G, GLfloat B, GLfloat A) { glcolor4f(r, G, B, A); glbegin(gl QUADS); glvertex2f(l, b); glvertex2f(r, b); glvertex2f(r, t); glvertex2f(l, t); glend(); void test0(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); 년 6 월 16 일 ( 수 ) 오후 6:00 -
18 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (4/8) rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc(gl SRC ALPHA, GL DST ALPHA); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); rect(0.0, 4.8, -4.8, 2.0, 0.0, 0.0, 1.0, 1.0); gldisable(gl BLEND); void test1(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc((a), (B)); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); gldisable(gl BLEND); (h) 다음함수 test1() 을수행시켰을때그림 5(b) 와같은결과를얻으려면, (A) 와 (B) 에어떤인자값이설정되어야할지, 다음값들중적절한인자를선택하라. ( 여기서 (1), (2), (3) 번영역의색깔은각각 (0, 0, 0), (1, 0, 0), (0, 1, 0) 임 ) GL ZERO, GL ONE, GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA 4. 지금가상의 3차원실내공간을자유롭게네비게이션하려하는데, 사용자가벽면을뚫고지나가지못하도록 Binary Space Partitioning Tree (BSPT) 를사용하여충돌검사를하려 한다. 지금모든벽면이사각형으로모델링이되어있는데, 이사각형들을사용하여구성한 BSPT TREE에대해아래와같은함수를호출하려한다. LOS(TREE, A, B); 이때원하는것은 3차원공간의두점 A와 B에의해정의된선분이실내공간의임의의벽면에해당하는사각형과교차를하는지알아내는것인데, 이작업은아래의코드로수행할수있다. 참고로 BSPT 타입은다음과같이정의되어있음. typedef struct BSPT { Polygon *poly; struct BSPT *fchild; struct BSPT *bchild; BSPT; int LOS(BSPT *T, float *start, float *end) { int side s, side e, side f, side b; if (!T) return 1; side s = check(start,t->poly); side e = check(end,t->poly); if ((side s == BSPT FRONT) && (side e == BSPT FRONT)) { return LOS( (A), start, end); else if ((side s == BSPT BACK) && (side e == BSPT BACK)) { return LOS( (B), start, end); else { if (intersect(t->poly, start, end)) return 0; else { side f = LOS(T->fchild, start, end); side b = LOS(T->bchild, start, end); return (C) ; 년 6 월 16 일 ( 수 ) 오후 6:00 -
19 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (5/8) (1) (3) (1) (1) (2) (2) (2) x x (a) test0() 수행결과 (b) test1() 수행결과 그림 5: 색깔의혼합 (a) 이함수는 0 또는 1 값을리턴하도록되어있는데, 문맥상언제 0 값을, 그리고언제 1 값을리턴하는지정확히기술하라. (b) 문맥상 check() 함수가하는일이무엇인지정확히기술하라. (c) 문맥상 (A) 와 (B) 에들어갈내용을 C 언어문법에맞게정확히기술하라. (d) 문맥상 (C) 에들어갈내용을 C 언어문법에맞게정확히기술하라. 5. 이문제도 Binary Space Partitioning Tree에관한것이다. 그림 6의함수 display bspt back to front() 는시점의위치 viewer[3] 가주어졌을때, 뒤에서앞으로 (back-to-front) 가면서 bspt의다각형들을그려주는함수이다. (a) 이예제프로그램의문맥상 (A) 에들어갈가장적절한내용의 C 코드를작성하라. 이함수는결과로 BSPT FRONT 또는 BSPT BACK을리턴해야한다. (b) (B), (C), (D), (E) 에들어갈내용을정확한 C 코드형태로기술하라. (c) bspt가나타내는물체를 OpenGL의블렌딩기능을사용하여투명하게그려주려한다. (F) 에들어갈내용을정확한 C 코드형태로기술하라. (d) 위의문제를모두제대로풀었다는가정하에, 만약뒤에서앞으로 (back-to-front) 가아니라앞에서뒤로가면서 (front-toback) 다각형들을그려주려면이프로그램의어느부분을어떻게고쳐야할지, 문장번호를언급하며정확히기술하라. 6. 다음은라이팅과쉐이딩에관한문제이다. 아래의 m개의광원에대한퐁의조명모델식을보고답하라. I λ = I aλ k aλ m 1 + f att (d i ) I li λ {k dλ (N L i ) i=0 + k sλ (N H i ) n (a) 변수 I aλ, k aλ, d i, I li λ, k dλ, N, L i, k sλ, H i, n중카메라의위치에영향을받는변수를모두나열하라. (b) 물체의위치와방향이바뀌었을때영향을받는변수를모두나열하라. (c) 광원의위치변화에영향을받는변수를모두나열하라 년 6 월 16 일 ( 수 ) 오후 6:00 -
20 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (6/8) typedef struct { int nv; // number of vertices float *vertex; // pointer to vertex data float *normal; // pointer to normal data float plane[4]; // plane equation Polygon; typedef struct bspt { // data structure for bspt Polygon *poly; struct bspt *fchild; // for the front side struct bspt *bchild; // for the back side BSPT; int check side(float *pos, Polygon *poly) { (A) BSPT *bspt; // object in BSPT float viewer[3]; // camera position. void display bspt back to front(bspt *bspt, float *viewer) { int viewer side; // (1) if (bspt == NULL) return; // (2) viewer side = check side(viewer, bspt->poly); // (3) if (viewer side == BSPT BACK) { // (4) display bspt back to front( (B), viewer); // (5) draw bspt poly(bspt->poly); // (6) display bspt back to front( (C), viewer); // (7) else { /* viewer side == BSPT FRONT */ // (8) display bspt back to front( (D), viewer); // (9) draw bspt poly(bspt->poly); // (10) display bspt back to front( (E), viewer); // (11) void display(void) { glblendfunc( (F) ); // (12) glenable(gl BLEND); // (13) glclear(gl COLOR BUFFER BIT GL DEPTH BUFFER BIT); // (14) display bspt back to front(bspt, viewer); // (15) glutswapbuffers(); 그림 6: BSPT 관련함수 년 6 월 16 일 ( 수 ) 오후 6:00 -
21 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (7/8) (d) H i 는어떤상황에서특히효율적으로사용이되는가? 두가지조건을명시하라. (e) 플랫쉐이딩, 퐁쉐이딩, 그리고고우러드쉐이딩등세가지방법을계산량이적은것부터순서대로나열하라. 7. 다음은 Cg API를통한쉐이더프로그래밍과퐁의조명모델에관한문제이다. 아래에주어진버텍스쉐이더및픽셀쉐이더를보고답하라. 참고로이예에서는원근투영과점광원을사용하고있음. struct output { float4 X: TEXCOORD0; float3 Y: TEXCOORD1; // (0) float4 position: POSITION; ; output main(float4 A: POSITION, float4 B: NORMAL, uniform float4x4 ModelViewProj: state.matrix.mvp, uniform float4x4 ModelView: state.matrix.modelview, uniform float4x4 ModelViewIT: state.matrix. (4).invtrans) { output OUT; OUT.X = mul(modelview, A); // (1) OUT.Y = mul(modelviewit, B).xyz; // (2) OUT.position = mul(modelviewproj, A); // (3) return OUT; state.light[0].ambient, uniform float4 ld: state.light[0].diffuse, uniform float4 ls: state.light[0].specular, uniform float4 ma: state.material.ambient, uniform float4 md: state.material.diffuse, uniform float4 ms: state.material.specular, uniform float me: state.material.shininess) { output OUT; OUT.color = g a * ma; float3 N = normalize(y); float3 L = normalize(lp - X); float NdotL = dot(n, L); OUT.color += ma * la; if(ndotl >= 0.0) { // (5) float3 What1 = normalize(-x); // (6) float3 What2 = normalize(l + What1); // (7) float NdotWhat2 = dot(n, What2); float4 li = lit(ndotl, NdotWhat2, me); float3 D = md * li.y; float3 S = ms * li.z; OUT.color += (8) ; return OUT; struct output { float3 color: COLOR; ; output main(float4 X: TEXCOORD0, float3 Y: TEXCOORD1, uniform float4 g a: state.lightmodel.ambient, uniform float4 lp: state.light[0].position, uniform float4 la: (a) 이프로그램은각픽셀을통해서보이는물체의각지점에서퐁의조명모델을적용하여쉐이딩계산을하는퐁쉐이딩계산을위한쉐이더코드이다. 이프로그램에서는 OpenGL의어떤좌표계에서쉐이딩계산을하고있을까? OC, MC, WdC, CC, NDC, EC, WC 등의기호를사용하여답하라 년 6 월 16 일 ( 수 ) 오후 6:00 -
22 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (8/8) (b) 주어진한점 p를 4행 4열행렬 M이나타내는아핀변환을통해기하변환한다고할때, p에서의법선벡터 (normal vector) n에대해동일한아핀변환을가하려면 n에어떤행렬을곱해야할지 M을사용하여표현하라. (c) 만약 (0) 문장의 float3 Y: TEXCOORD1; 를 float3 Y: COLOR1; 과같이변경하였을때, 이쉐이더들이제대로작동하려면약간의수정이필요한데, 그내용을 C/Cg 문법에맞게정확히기술하라. 그림 7: 조명효과의조절 (k) 그림 7은위의쉐이더프로그램에서어떤특정변수값을바꾸어가며조절한렌더링효과를보여주고있다. 과연어떤변수인지정확히기술하라. (d) 보편적인렌더링관련쉐이더코드작성시버텍스쉐이더에서는꼭해주어야하는작업이하나있다. 위의버텍스쉐이더에서이작업과가장관련이깊은문장의번호는 (1), (2), (3) 중어떤것이며, 이작업은구체적으로무엇을의미하는지정확히기술하라. (e) 문맥상버텍스쉐이더코드의 (4) 부분에들어갈내용을정확히기술하라. 대소문자를구별할것. (f) (5) 번의 if 문장은어떠한경우에지역조명모델식을계산하지않겠다는것인지그상황을설명하라. (g) 만약 (5) 번의 if 문장을제거해도제거전과동일하게쉐이딩이될까? 예 / 아니오로답하고그이유를정확히기술하라. (h) (6) 번문장의 What1 변수에는정확히어떤지점에서어느방향을가리키는벡터가저장이될까? (i) (7) 번문장의 What2 변수가저장하는벡터를통칭무엇이라고하는가? (j) 문맥상 (8) 번에들어갈내용을 C 언어문맥에맞게정확히기술하라 년 6 월 16 일 ( 수 ) 오후 6:00 -
23 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/9) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사문제 ( 담당교수 : 임인성 ) 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 1. 그림 1에는모델링좌표계 (MC) 에설계되어있는자동차모델을세상좌표계 (WC) 로배치해주는과정이도시되어있다 ( 이그림에서 z m 과 z w 축은각각오른손좌표계방향으로되어있음 ). 그림 1: 모델링변환과뷰잉변환 (a) 자동차의위치와방향에관련된정보가세상좌표계에서한점 e =(e x,e y,e z ) 와길이가 1이고서로수직인세벡터 u = (u x,u y,u z ), v = (0, 0, 1), n = (n x,n y,n z ) 로주어져있다. 이때적용되는모델링변환에해당하는 4행 4열행렬 M M 을이동변환, 크기변환, 회전변환등의기본변환행렬의곱으로적절히표현하라 ( 예를들어, M M = T 1 R 1 T 2 S 1 와같은방식으로표현하고, 각기본변환행렬의내용을정확히기술하되, 전체곱행 xm u n ym 렬은계산할필요가없음 ). (b) C = (e, (u, v, n)) 정보를사용하여카메라를배치하려할때적용되는뷰잉변환 M V 를위의문제에서사용한기본변환의행렬또는그의역행렬을가급적많이사용하여표현하라. (c) 마지막쪽의그림 9에서이문제와가장관련이깊은박스의기호를기술하라. 2. 다음은색깔혼합 (color blending) 에관한문제이다. (c A α A ) 와 (c B α B ) 를두장의이미지 A와 B의대응되는화소의미리곱한색깔 (premultiplied color) 이라하자. F A 와 F B 를각각 A와 B의화소에서 α A 와 α B 의비율로존재하는미립자들중결과이미지 O에살아남는미립자의비율이라하면, 합성의결과로생성되는미리곱한색깔은다음과같다. c O = F A c A + F B c B α O α A α B (a) 투명한물체를렌더링하거나, 안개등의기상효과, 텍스춰의혼합, 앤티앨리어싱기법들을구현하는데유용하게사용이되는 A over B 연산의경우 F A 와 F B 는각각얼마일까? (b) 그림 2의아래쪽그림은시선을따라샘플링한색깔들을카메라를기준으로앞에서뒤로가면서 (front-to-back) 점진적으로합성해주는상황을도시하고있다. 이 년 6 월 27 일 ( 토 ) 오후 1:00 -
24 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (2/9) 그림 2: Back-to-front and front-to-back compositions S D D S (a) 경우 A (b) 경우 B 그림 3: 두가지경우를 OpenGL API를사용하여구현하려면, 현재까지합성한색깔을미리곱한색깔 (c D α D ) = (α D C D α D ) 형태로 RGBA 타입의색깔버퍼 (color buffer) 에저장한후, 지금추가적으로합성하려는색깔을렌더링파이프라인을타고들어오는미리곱한색깔형태의프래그먼트색깔 (c S α S )=(α S C S α S ) 로하여합성을해주면된다. 이때그림 3(a) 와 (b) 에도시된두가지경우중이문제에더적합한경우는 A와 B 중어떤것일까? (c) 위문제에연속하여, 합성의결과새로이생성되는미리곱한색깔을 (c O α O ) = (α O C O α O ) 라할때, α O 의식을정확히기술하라. (d) 이때합성된화소에칠해줄실제색깔 ( 미리곱한색깔이아닌 ) C O 에대한식을 α D, α S, C D, C S 등으로표현하라. (e) 위세문제에서의혼합연산을 OpenGL API의색깔혼합기능을사용하여구현하려할경우, 원시인자 (source factor) 와목적인자 (destination factor) 로어떤값을사용해야할까? 다음 OpenGL 상수값들중적절한인자를선택하라. GL ZERO, GL ONE GL SRC ALPHA GL DST ALPHA GL ONE MINUS SRC ALPHA GL ONE MINUS DST ALPHA (f) 만약그림 2의위쪽그림에서와같이뒤에서앞으로오면서 (back-to-front) 점진적으로합성하려할경우, 과연색깔버퍼의알파채널이필요할까? 예 / 아니오 로답하고그이유를분명히답하라. (g) 만약 OpenGL API를사용하여뒤에서앞으로오면서 (back-to-front) 점진적으로합성하려할경우, 원시인자 (source factor) 와목적인자 (destination factor) 로어떤값을사용해야할까? 위의값들중적절한인자를선택하라. (h) 그림 4(a) 와 (b) 에는두개의입력이미지가주어져있다. GIRL 이미지와 NAGEL 이미지모두 RGBA 타입의이미지로서, GIRL 이미지의경우모든 A 채널값이 1.0으로저장되어있다. 반면 NAGEL 이 년 6 월 27 일 ( 토 ) 오후 1:00 -
25 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (3/9) 역을제외한나머지영역 ( 즉 A 채널값이 1.0으로지정되어있는부분 ) 은대응되는 GIRL 이미지의색깔로, 나머지영역은검정색으로칠하도록합성한예이다. 이렇게합성하기위해서 (A) 와 (B) 에필요한 OpenGL 상수를정확히기술하라. (a) GIRL 이미지 (b) NAGEL 이미지 (j) 마지막쪽의그림 9에서이문제와가장관련이깊은박스의기호를기술하라. 3. 다음은카메라의조작에관한문제이다. (c) 합성예 1 (d) 합성예 2 그림 4: 색깔혼합예미지의경우흰색부분의화소에대해서는 A 채널값이 0.0으로저장되어있고, 흰색을제외한나머지영역의화소에대해서는 1.0으로지정이되어있다. 이때아래와같은코드를사용하여 NAGEL 이미지에서흰색이있은영역을제외한나머지영역 ( 즉 A 채널값이 1.0으로지정되어있는부분 ) 의색깔은자신의색깔로, 나머지영역은 GIRL 이미지의색깔을사용하여그림 4(c) 이미지와같은그림을생성하려한다. 이때 (A) 와 (B) 에들어갈 OpenGL 상수를정확히기술하라. glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); draw GIRL(); glblendfunc( (A), (B) ); draw NAGEL(); gldisable(gl BLEND); (i) 위문제에연속하여, 그림 4(d) 의이미지는 NAGEL 이미지에서흰색이있은영 (a) 지금광부들이사용하는헤드라이트의예에서와같이카메라에고정된점광원을사용하려한다. 만약광원을항상카메라의기준점에서위로 3.0만큼떨어진곳에위치시키려하면, 아래의코드에서 gllightfv(gl LIGHT0, GL POSITION, li pos); 함수를정확히어느지점에서호출해야하는지 ( 라인번호를사용하여위치지정 ), 그리고그때 (A), (B), (C), (D) 에들어갈내용은무엇인지기술하라. GLfloat li pos[4] = { (A), (B), (C), (D) ; // (1). glmatrixmode(gl MODELVIEW); // (2) glloadidentity(); // (3) glulookat(v[0], v[1], v[2], c[0], c[1], c[2], 0.0, 1.0, 0.0); // (4) glpushmatrix(); // (5) Do modeling transform and draw objects glpopmatrix(); // (6) (b) 만약광원을세상좌표계의 (3.0, 0.5, - 1.5) 인지점에고정시킨후렌더링을하려할경우에대해위문제를풀어라 년 6 월 27 일 ( 토 ) 오후 1:00 -
26 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (4/9) 그림 6: 라이팅계산 4. 다음은라이팅계산에관한문제이다. (a) 점광원, 평행광원, 그리고분산광원을비교할때계산비용이높은것으로부터낮은순서로나열하라. (b) 퐁쉐이딩, 플랫쉐이딩, 그리고고우러드쉐이딩을비교할때계산비용이높은것으로부터낮은순서로나열하라. (c) 위의세가지쉐이딩방법중선형보간 (linear interpolation) 과가장관련이적은것은? (d) 그림 5의식에서이상한부분을지적하고옳게고쳐라. (e) 그림 5의식에서 Lambert의코사인법칙을표현해주는부분을정확히기술하라. (f) 그림 5의식에서카메라에서바라보는방향에영향을받는변수를모두나열하라. (g) 그림 5의식에서물체의위치와방향이바뀌었을때영향을받는변수를모두나열하라. (h) 그림 6은그림 5의식의어떤변수의성질을설명하기위한것인가? (i) 전통적인 fixed-function 렌더링파이프라인을고려할때, 마지막쪽의그림 9에서이문제와가장관련이깊은두개의박스의기호를기술하라. 5. 다음은 Cg API를통한쉐이더프로그래밍과퐁의조명모델에관한문제이다. 아래에주어진 Cg 버텍스쉐이더및픽셀쉐이더를보고답하라. 참고로이예에서는원근투영과점광원을사용하고있음. struct output { float4 X: TEXCOORD0; float3 Y: TEXCOORD1; float4 position: POSITION; ; output main(float4 A: POSITION, float4 B: NORMAL, uniform float4x4 ModelViewProj: state.matrix.mvp, uniform float4x4 ModelView: state.matrix.modelview, uniform float4x4 ModelViewIT: state.matrix. (4).invtrans) { output OUT; OUT.X = mul(modelview, A); // (1) OUT.Y = mul(modelviewit, B).xyz; // (2) OUT.position = mul(modelviewproj, A); // (3) return OUT; =============================== struct output { float3 color: COLOR; ; output main(float4 X: TEXCOORD0, float3 Y: TEXCOORD1, uniform float4 g a: state.lightmodel.ambient, uniform float4 lp: state.light[0].position, uniform float4 la: state.light[0].ambient, uniform float4 ld: state.light[0].diffuse, uniform float4 ls: state.light[0].specular, uniform float4 ma: state.material.ambient, uniform float4 md: state.material.diffuse, uniform float4 ms: state.material.specular, uniform float me: state.material.shininess) { 년 6 월 27 일 ( 토 ) 오후 1:00 -
27 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (5/9) output OUT; OUT.color = g a * ma; float3 N = normalize(y); float3 L = normalize(lp - X); float NdotL = dot(n, L); if(ndotl >= 0.0) { // (5) b 1 4 e a 3 2 c d texel pixel preimage OUT.color += ma * la; float3 What1 = normalize(-x); // (6) float3 What2 = normalize(l + What1); // (7) float NdotWhat2 = dot(n, What2); float4 li = lit(ndotl, NdotWhat2, me); float3 D = md * li.y; float3 S = ms * li.z; OUT.color += (8) ; return OUT; (a) 이프로그램은각픽셀을통해서보이는물체의각지점에서퐁의조명모델을적용하여쉐이딩계산을하는퐁쉐이딩계산을위한쉐이더코드이다. 이프로그램에서는 OpenGL의어떤좌표계에서쉐이딩계산을하고있을까? OC, MC, WdC, CC, NDC, EC, WC 등의기호를사용하여답하라. (b) 보편적인렌더링관련쉐이더코드작성시버텍스쉐이더에서는꼭해주어야하는작업이하나있다. 위의버텍스쉐이더에서이작업과가장관련이깊은문장의번호는 (1), (2), (3) 중어떤것이며, 이작업은구체적으로무엇을의미하는지정확히기술하라. (c) 문맥상버텍스쉐이더코드의 (4) 부분에들어갈내용을정확히기술하라. 대소문자를구별할것. (d) ( 사실없어도문제는없으나 ) (5) 번의 if 그림 7: 선형필터문장은어떠한경우에지역조명모델식을계산하지않겠다는것인지그상황을설명하라. (e) (6) 번문장의 What1 변수에는정확히어떤지점에서어느방향을가리키는벡터가저장이될까? (f) (7) 번문장의 What2 변수가저장하는벡터를통칭무엇이라고하는가? (g) 문맥상 (8) 번에들어갈내용을 C 언어문맥에맞게정확히기술하라. (h) 그림 6은위의쉐이더프로그램에서어떤특정변수값을바꾸어가며조절한렌더링효과를보여주고있다. 과연어떤변수인지정확히기술하라. (i) 마지막쪽의그림 9에서위의쉐이더코드의두번째에있는 output main() 함수가수행되는부분에해당하는박스의기호를기술하라. 6. 다음은 OpenGL 환경에서의텍스춰필터링에관한문제이다. (a) 레벨 3의밉맵텍스춰의한텍셀이나타내는영역의면적은레벨 1의밉맵텍스춰의한텍셀이나타내는영역의면적의몇배일까? 참고로원래주어진고해상도이미지의레벨은 0임 년 6 월 27 일 ( 토 ) 오후 1:00 -
28 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (6/9) (b) 그림 7에서 a는픽셀에대한원상 (preimage) 의중점을가리키고, b부터 e까지는 a를포함하는주변텍셀의중심점을나타낸다. b, c, d, 그리고 e 지점의텍셀색깔이각각 (1, 1, 1), (1, 0, 0), (1, 1, 0), 그리고 (0, 1, 1) 이라고하자. 이때선형필터를사용할경우 a 지점에대하여계산되는색깔은무엇일까? 반드시계산과정을밝혀라 ( 이그림에서숫자는거리에대한비율을나타냄 ). (c) 그림 8(a) 는확대필터로 GL NEAREST와 GL LINEAR 중의하나를, 축소필터로는다음네가지필터중하나를사용하여렌더링한결과이다 ( 이과정에서서로다른레벨의텍스춰로서로다른색깔의이미지를사용하였음 ). GL NEAREST MIPMAP NEAREST GL LINEAR MIPMAP NEAREST GL NEAREST MIPMAP LINEAR GL LINEAR MIPMAP LINEAR 렌더링결과를볼때, 과연확대필터와축소필터로각각어떤필터를사용하였을까? (d) 그림 8(a) 을볼때, 과연확대상황이발생하고있을까? 예 / 아니오 로답하고, 아니라면그이유를, 그렇다면구체적으로어느부분에서확대상황이발생하고있는지간단한그림을사용하여정확히기술하라. (e) 같은그림에서육면체의왼쪽측면을보면서로다른색깔의텍스춰가적용되고있는데, 파란색과녹색의텍스춰중어떤색깔의텍스춰의레벨이더높은지, 그리고그이유를설명하라. (f) 그림 8(b) 는여섯개의사각형으로이루어진육면체의각면에대하여동일한텍스춰를적용하여렌더링한결과이다. 이 예에서는 [0, 1] [0, 1] 영역의텍스춰공간전체에대한텍스춰이미지를각사각형에적용되도록, 각사각형의꼭지점에텍스춰좌표를부여하였다. 반면에그림 8(c) 는다른렌더링인자는모두동일한상황에서, 텍스춰행렬스택만조작하여생성한결과이다. 즉다음과같은코드를적절히삽입하였는데, (A) 안에들어갈 OpenGL 문장 ( 들 ) 을기술하라. 이그림에서텍스춰가적용된이미지영역의크기가각방향반으로줄어들었고, 그중심은육면체각면의중심에해당한다. 여기서텍스춰랩 (wrap) 모드는 GL CLAMP임. glmatrixmode(gl TEXTURE); glpushmatrix(); (A) glmatrixmode(gl MODELVIEW);. glmatrixmode(gl TEXTURE); glpopmatrix(); (g) 마지막쪽의그림 9에서이문제와가장관련이깊은박스의기호를기술하라. 7. 다음은임의의광선 p(t) =o + td와세개의꼭지점으로구성된삼각형 T =(p 0, p 1, p 2 ) 와의교점을구해 ( 물론교차할경우 ), T 를기준으로하는 barycentric coordinates로표현해주는것에관한문제이다. 여기서각벡터의좌표값은다음과같고, 편의상 d의길이는 1임. o x d x p xi o = o y, d = d y, p i = p yi o z d z p zi (a) 이광선과삼각형의교점을 p(b 1,b 2 ) = (1 b 1 b 2 )p 0 + b 1 p 1 + b 2 p 2 와같이표 년 6 월 27 일 ( 토 ) 오후 1:00 -
29 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (7/9) 현하려한다. 지금광선의출발점에해당하는 o로부터의거리에해당하는 t와교점의 barycentric coordinates에해당하는 b 1 과 b 2 를계산해야하는데, 이는아래와같이 3원 1차연립방정식을풀어해결할수있다. 이때 3행 3열행렬의 9개의원소 m 1, m 2,, m 9 의각값을정확히기술하라. m 1 m 2 m 3 t o x p x0 m 4 m 5 m 6 b 1 = o y p y0 m 7 m 8 m 9 b 2 o z p z0 (b) s = o p 0, e 1 = p 1 p 0, e 2 = p 2 p 0 라할때, 이연립방정식의해는다음과같이표현할수있다. 여기서 과 는각각벡터의내적 (inner product) 과외적 (cross product) 를나타냄. t (s e 1 ) e 2 b 1 = 1 (d e 2 ) e 1 (d e 2 ) s (s e 1 ) d b 2 이식을부주의하게프로그래밍할경우, 오버플로우에러가발생할수있다. 과연이런경우는기하학적으로어떠한상황에해당하는가? (c) 바로위문제에서 t, b 1, b 2 값을오버플로우에러없이계산을하였다고가정하자. 이경우과연각변수값이어떤범위의값을가질때, 광선과삼각형이교차한다고말할수있을까? (d) 3차원공간의두벡터 a와 b의외적 a b를계산하는데정확히몇번의 ( 덧셈 / 뺄셈 ), 곱셈, 그리고나눗셈연산이필요한지를밝혀라. 외적의계산식을통하여설명하고, 덧셈과뺄셈연산은같은연산으로취급할것. (e) 위의식을사용하여한광선과삼각형의교점을효율적으로계산하기위하여 t, b 1, b 2 를계산하는데소요되는 ( 덧셈 / 뺄셈 ), 곱셈, 그리고나눗셈연산의회수를기술하라. ( 주의 : 일반적으로나눗셈은연산비용이높으므로, 한벡터의각원소를동일한값으로나누어주는연산은일단그값으로나눗셈을한후벡터의각원소에곱해주는방식을취한다고가정 ). 8. 다음은임의의광선 p(t) =o + td와축에정렬된바운딩박스 (Axis-Aligned Bounding Box, AABB) 가교차하는지를판별해주는프로그램의일부이다. 이코드를보고답하라. float tx min, ty min, tz min; float tx max, ty max, tz max; float a = 1.0f/aa; if (a >= 0.0) { tx min = (x0 - p) * a; tx max = (x1 - p) * a; else { tx min = (x1 - p) * a; tx max = (x0 - p) * a; float b = 1.0f/bb; if (b >= 0.0) { ty min = (y0 - r) * b; ty max = (y1 - r) * b; else { ty min = (y1 - r) * b; ty max = (y0 - r) * b; float c = 1.0f/cc; if (c >= 0.0) { tz min = (z0 - q) * c; tz max = (z1 - q) * c; else { tz min = (z1 - oz) * c; 년 6 월 27 일 ( 토 ) 오후 1:00 -
30 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (8/9) tz max = (z0 - oz) * c; float t0, t1; if (tx min > tymin) t0 = (A) ; else t0 = (B) ; if (tz min > t0) t0 = (C) ; if (tx max < tymax) t1 = tx max; else t1 = ty max; if (tz max < t1) t1 = tz max; return (t0 < t1 && t1 > 0); (a) aa, bb, cc가각각광선의방향벡터 d의 x, y, z 좌표값을의미한다고할때, 문맥상눈의위치에해당하는 o의 x, y, z 좌표를위코드의변수를사용하여표현하라. (b) 문맥상 (A), (B), 그리고 (B) 에들어갈내용을 C 언어문법에맞게정확히기술하라. (c) 만약마지막문장이수행될때, t0 < t1이거짓이라면, 이는어떤상황에해당하는가? (d) 만약마지막문장이수행될때, t0 < t1는참이나 t1 > 0이거짓이라면, 이는어떤상황에해당하는가? 그림 9: Microsoft Direct3D 10 그래픽스파이프라인 (from Wikipedia) 년 6 월 27 일 ( 토 ) 오후 1:00 -
31 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (9/9) m 1 I λ = I aλ k aλ + f att (d) I li λ {k dλ (N L i )+k sλ (N H) n i=0 그림 5: 라이팅계산수식 (a) (b) (c) 그림 8: 텍스춰필터링 년 6 월 27 일 ( 토 ) 오후 1:00 -
32 [CSE4170] (1/7) [CSE4170] : כ. כ (a) 1(a).. glmatrixmode(gl MODELVIEW); glpushmatrix(); gltranslatef(0.8, 0.7, 0.0); glrotatef(180.0, 0.0, 1.0, 0.0); glrotatef(-90.0, 1.0, 0.0, 0.0); glscalef(0.95, 0.95, 0.95); glmatrixmode(gl TEXTURE); // (A) glpushmatrix(); // (B) gltranslatef(-0.5, 0.0, 0.0); // (C) glscalef(2.0, 1.0, 1.0); // (D) draw object(&teapot); glpopmatrix(); // (E) glmatrixmode(gl MODELVIEW); // (F) glpopmatrix();. 2: GL CLAMP, draw object(&teapot);, 2 (s, t) כ 0 1 כ (-1.0, -1.0) כ. (A) (F),. (b) GL CLAMP GL REPEAT, (C) (D),. (c) 1(a) (b) (c),., 1.(a)? float ttt = 0.0; int mode = 1; void next(int t) { if (mode == 1) { if ((ttt += 0.1) >= 1.0) mode = -1; else { if ((ttt -= 0.1) <= -1.0) mode = 1; glutpostredisplay(); gluttimerfunc(500, next, 1); ( ) 2:45 (AS412) - c 2008
33 [CSE4170] (2/7) (a) (b) (c) 1: 2. 3, Binary Space Partitioning Tree (BSPT)., BSPT TREE. LOS(TREE, A, B); כ 3 A B כ,. BSPT. typedef struct BSPT { Polygon *poly; struct BSPT *fchild; struct BSPT *bchild; BSPT; return 0; else { side f = LOS(T->fchild, start, end); side b = LOS(T->bchild, start, end); return (C) ; (a) 0 1 כ כ כ, 1, 0. (b) check(). (c) (A) (B) C. (d) (C) C. int LOS(BSPT *T, float *start, float *end) { int side s, side e, side f, side b; if (!T) return 1; side s = check(start,t->poly); side e = check(end,t->poly); if ((side s == BSPT FRONT) && (side e == BSPT FRONT)) { return LOS( (A), start, end); else if ((side s == BSPT BACK) && (side e == BSPT BACK)) { return LOS( (B), start, end); else { if (intersect(t->poly, start, end)) 3. programmable GPU (a) 3. (b) 3. (c) 3. (d) 3 OpenGL GL SRC ALPHA. (e) 3 OpenGL GL CCW ( ) 2:45 (AS412) - c 2008
34 [CSE4170] (3/7) A D B C E 3: NVIDIA GeForce 6 Series GPU (f) 90 OpenGL Gouraud, 4. (g) 4 H 3. (h), (c S α S ) (c D α D ) S D (pre-multiplied color),. ( co α O ) = F S ( cs α S ) + F D ( cd α D (a) (0.6, 0.6, 0.6, 0.6), כ כ. (b) F S =1 α D F D =1 כ. ) 4: NVIDIA G80 specification (c) 5 F S F D? (d) 6 (a). (b). (A) (B) OpenGL ( (0.0, 0.0, 0.0, 0.0), draw rectangle(), כ ). GL ZERO, GL ONE, GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, ( ) 2:45 (AS412) - c 2008
35 [CSE4170] (4/7) (a) S D 5: 1 6: GL ONE MINUS DST ALPHA (b) void blend(void) { glblendfunc(gl ONE, GL ZERO); draw rectangle(-2.0, 4.0, -2.0, 4.0, 1.0, 1.0, 1.0, 1.0); glblendfunc( (A), (B) ); draw rectangle(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); 5.. (a) 3 5? (b) GL UNSIGNED BYTE GL RGBA כ? כ. (c) 7(a) a (preimage), b e a. b, c, d, e (1, 1, 1), (1, 0, 0), (1, 1, 0), (0, 1, 1). a?, כ. (d) 7(b) GL LINEAR MIPMAP LINEAR, GL NEAREST. כ, כ. (e) 7(c)., (trilinear interpolation filter)? /. 6. Cg API. Cg.. struct output { float4 X: TEXCOORD0; float3 Y: TEXCOORD1; float4 position: POSITION; ; output main(float4 A: POSITION, float4 B: NORMAL, uniform float4x4 ModelViewProj: state.matrix.mvp, uniform float4x4 ModelView: state.matrix.modelview, uniform float4x4 ModelViewIT: state.matrix. (4).invtrans) { output OUT; OUT.X = mul(modelview, A); // (1) OUT.Y = mul(modelviewit, B).xyz; // (2) OUT.position = mul(modelviewproj, A); // (3) return OUT; =============================== struct output { float3 color: COLOR; ; output main(float4 X: TEXCOORD0, float3 Y: TEXCOORD1, uniform float4 g a: state.lightmodel.ambient, uniform float4 lp: state.light[0].position, uniform float4 la: state.light[0].ambient, ( ) 2:45 (AS412) - c 2008
36 [CSE4170] (5/7) b 1 a c texel 4 e 3 2 d pixel preimage (a) (b) (c) 7: uniform float4 ld: state.light[0].diffuse, uniform float4 ls: state.light[0].specular, uniform float4 ma: state.material.ambient, uniform float4 md: state.material.diffuse, uniform float4 ms: state.material.specular, uniform float me: state.material.shininess) { output OUT; OUT.color = g a * ma; float3 N = normalize(y); float3 L = normalize(lp - X); float NdotL = dot(n, L); if(ndotl >= 0.0) { // (5) OUT.color += ma * la; float3 What1 = normalize(-x); // (6) float3 What2 = normalize(l + What1); // (7) float NdotWhat2 = dot(n, What2); float4 li = lit(ndotl, NdotWhat2, me); float3 D = md * li.y; float3 S = ms * li.z; OUT.color += (8) ; return OUT; (a). OpenGL? OC, MC, WdC, CC, NDC, EC, WC 8:. (b). (1), (2), (3) כ,. (c) (4). כ. (d) ( ) (5) if כ. (e) (6) What1? (f) (7) What2? (g) (8) C. (h) 8 כ.. (i) ( ) 2:45 (AS412) - c 2008
37 [CSE4170] (6/7). I λ = I aλ k aλ + I lλ {k dλ (N L)+k sλ (N H) n (j) 4 output main(). 7. Binary Space Partitioning Tree. 9 display bspt back to front() viewer[3], (back-to-front) bspt. (a) (A) C. BSPT FRONT BSPT BACK. (b) (B), (C), (D), (E) C. (c) bspt OpenGL. (F) C. (d), (back-to-front) (front-to-back),. 0.0, 1.0, 0.0); // (4) (b), M 1 M 2 M 3, M V. (c) C 0 =(e, u, v, n) =((000), (100), (010), (001)) C 1 = (( ), (0 0 1), (0 1 0), ( 1 00)). glmatrixmode(gl MODELVIEW); glloadidentity(); glmultmatrixf(cam.mat); gltranslatef( (A), (B), (C) ); i. (A), (B), (C). ii. cam.mat (a) כ, 3.0. gllightfv(gl LIGHT0, GL POSITION, li pos);, (A), (B), (C). GLfloat li pos[4] = { (A), (B), (C), 1.0 ; // (1). glmatrixmode(gl MODELVIEW); // (2) glloadidentity(); // (3) glulookat(v[0], v[1], v[2], c[0], c[1], c[2], ( ) 2:45 (AS412) - c 2008
38 [CSE4170] (7/7) typedef struct { int nv; // number of vertices float *vertex; // pointer to vertex data float *normal; // pointer to normal data float plane[4]; // plane equation Polygon; typedef struct bspt { // data structure for bspt Polygon *poly; struct bspt *fchild; // for the front side struct bspt *bchild; // for the back side BSPT; int check side(float *pos, Polygon *poly) { (A) BSPT *bspt; // object in BSPT float viewer[3]; // camera position. void display bspt back to front(bspt *bspt, float *viewer) { int viewer side; // (1) if (bspt == NULL) return; // (2) viewer side = check side(viewer, bspt->poly); // (3) if (viewer side == BSPT BACK) { // (4) display bspt back to front( (B), viewer); // (5) draw bspt poly(bspt->poly); // (6) display bspt back to front( (C), viewer); // (7) else { /* viewer side == BSPT FRONT */ // (8) display bspt back to front( (D), viewer); // (9) draw bspt poly(bspt->poly); // (10) display bspt back to front( (E), viewer); // (11) void display(void) { glblendfunc( (F) ); // (12) glenable(gl BLEND); // (13) glclear(gl COLOR BUFFER BIT GL DEPTH BUFFER BIT); // (14) display bspt back to front(bspt, viewer); // (15) glutswapbuffers(); 9: BSPT ( ) 2:45 (AS412) - c 2008
39 (1/6) (43-170) : כ. כ (a) WC, M 1, M 2, M 3 M V כ. (b) (halfway vector)? (c),,? (d) OpenGL (back-face culling), OC,MC,WdC, CC, NDC, EC, WC. (e) (per-vertex operation) (per-pixel operation)? (f) (preimage)? (g), כ כ,? (h) OpenGL כ. i. depth buffering ii. view volume clipping iii. lighting computation in EC iv. texture mapping v. perspective transformation vi. back-face culling vii. blending (i) OpenGL. i. lighting ii. blending iii. perspective division iv. depth buffering v. texture mapping vi. viewport transformation 2.. S D. (c S α S ) (c D α D ) (pre-multiplied color), (c O α O ). ) ) ) ( co α O = F S ( cs α S + F D ( cd α D (a) כ (0.3, 0.3, 0.3, 0.3), כ. (b) 1 F S F D כ? (c) S over D, α O כ S D כ. (d) 2. M 0, M 1, M 2, M 0 C 0 1 α 0. M ( ) 3:00 -
40 (2/6) S D 1: 1 α 0 C 0 α 1 C 1 2: 2 α 2 =1.0 2 C C 1 1 α 1, M 2 C 2. M 0 M 1 (frontto-back order) α 01 כ. (e) M 0 M 1 C 01 כ,. C 0, C 1, C 01 RGB. (f) C 012. (g) test0() 3(a), (1) (2) RGB. ( : RGB כ 0 1 כ ) void test0(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc(gl SRC ALPHA, GL DST ALPHA); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); rect(0.0, 4.8, -4.8, 2.0, 0.0, 0.0, 1.0, 1.0); gldisable(gl BLEND); void test1(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc((a), (B)); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); gldisable(gl BLEND); (h) test1() 3(b), (A) (B) כ? ( (1), (2), (3) כ (0, 0, 0), (1, 0, 0), (0, 1, 0) ). GL ZERO, GL ONE, GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA void rect(glfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat R, GLfloat G, GLfloat B, GLfloat A) { glcolor4f(r, G, B, A); glbegin(gl QUADS); glvertex2f(l, b); glvertex2f(r, b); glvertex2f(r, t); glvertex2f(l, t); glend(); ( ) 3:00 -
41 (3/6) (1) (3) (1) (1) (2) (2) (2) x x (a) test0() (b) test1() 3: 3.. (a) Phong כ. I λ = I aλ k aλ + m 1 i=0 f att (δ i ) I li λ {k dλ (N L i ) + k sλ (R V ) n ( N = L i = R = V =1),. (b) R כ ( כ ). (c) f att (δ i ) כ, δ i כ. (d) 4 Cg ( ). SomeMatrix כ. ModelView. (e) AnotherMatrix כ. (f) (A) Cg. (g) computer. ( ). (h) computer normalize(*) 1.? (i) normalize(*)? /. (j) sogang,? (k) float4 A = lit(a, b, c); lit() a, b, c כ A, A.x, A.y, A.z כ. ( : ) (l) diffuse כ. (m), OC, ( ) 3:00 -
42 (4/6) b 1 4 e a 3 2 c d 5: texel pixel preimage MC, WdC, CC, NDC, EC, WC. (n) Phong ( )? /. 4. OpenGL. (a) 3 1? 0. (b) 5 a (preimage), b e a. b, c, d, e (1, 1, 1), (1, 0, 0), (1, 1, 0), (0, 1, 1). a? ( ). (c) 6(a) GL NEAREST GL LINEAR, ( ). GL NEAREST MIPMAP NEAREST, GL LINEAR MIPMAP NEAREST, GL NEAREST MIPMAP LINEAR, GL LINEAR MIPMAP LINEAR,? (d),?,. (e),,. (f) 6(b). [0, 1] [0, 1],. 6(c),., (A) OpenGL ( ).,. (wrap) GL CLAMP. glmatrixmode(gl TEXTURE); glpushmatrix(); (A) glmatrixmode(gl MODELVIEW);. glmatrixmode(gl TEXTURE); glpopmatrix(); ( ) 3:00 -
43 (5/6) struct output { float4 position: POSITION; float4 ppp: TEXCOORD0; float3 nnn: TEXCOORD1; float3 L: TEXCOORD2; float3 H: TEXCOORD3; ; output main(float4 position: POSITION, float4 normal: NORMAL, uniform float4 light position, uniform float4x4 SomeMatrix, uniform float4x4 ModelView, uniform float4x4 AnotherMatrix) { output OUT; OUT.position= mul(somematrix, position); OUT.ppp = mul(modelview, position); OUT.nnn = normalize(mul(anothermatrix, normal).xyz); OUT.L = normalize(light position - OUT.ppp).xyz; float3 V = normalize( (A) ); OUT.H = normalize(out.l + V); return OUT; struct output { float3 color: COLOR; ; output main(float4 position: TEXCOORD0, float3 graphics: TEXCOORD1, float3 sogang: TEXCOORD2, float3 computer: TEXCOORD3, uniform float4 global ambient, uniform float4 light position, uniform float4 light ambient, uniform float4 light diff spec, uniform float4 mat ambient, uniform float4 mat diffuse, uniform float4 mat specular, uniform float mat shininess) { output OUT; OUT.color = global ambient * mat ambient; float3 G = normalize(graphics); float GdotS = dot(g, sogang); if(gdots >= 0.0) { OUT.color += mat ambient * light ambient; computer = normalize(computer); float GdotC = dot(g, computer); float4 lighting = lit(gdots, GdotC, mat shininess); float3 diffuse = mat diffuse * lighting.y; float3 specular = mat specular * lighting.z; OUT.color += light diff spec * (diffuse + specular); return OUT; 4: Cg ( ) 3:00 -
44 (6/6) (a) (b) (c) 6: ( ) 3:00 -
45 (1/8) (43-170) : כ. כ..,,, כ. 1.? 2.. (a),,. gllightfv(gl LIGHT0, GL POSITION, li pos);, (A), (B), (C) כ. GLfloat li pos[4] = {(A), (B), (C), 1.0 ;. glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(v[0], v[1], v[2], c[0], c[1], c[2], 0.0, 1.0, 0.0); (b), M 1 M 2 M 3, OpenGL glmultmatrixf() ( GLfloat m1, m2, m3, mi1, mi2, mi3 ). (c) (10.0, 0.0, 0.0). x, z, y., (D) (E) C/C++. glmatrixmode(gl MODELVIEW); glloadidentity(); glrotatef( (D) ); gltranslatef( (E) ); 3. p(t) =o + td T =(p 0, p 1, p 2 ) ( ), T barycentric coordinates כ. כ, d 1. o = o x o y o z, d = d x d y d z, p i = p xi p yi p zi (a) p(b 1,b 2 ) = (1 b 1 b 2 )p 0 + b 1 p 1 + b 2 p 2. o t barycentric coordinates b 1 b 2, m 1, m 2,, m 9 כ ( כ ). m 1 m 2 m 3 m 4 m 5 m 6 m 7 m 8 m 9 t b 1 b 2 = o x p x0 o y p y0 o z p z0 (b) s = o p 0, e 1 = p 1 p 0, e 2 = p 2 p 0,. (inner product) (cross product). t b 1 b 2 1 = (d e 2 ) e 1 (s e 1) e 2 (d e 2 ) s (s e 1 ) d ( ) 3:00 -
46 (2/8),.? (c) t, b 1, b 2 כ. כ כ,? (d) 3 a b a b ( / ),, כ., כ. (e) t, b 1, b 2 כ ( / ),,. כ ( :, כ כ ) (a) ray (ray.eye[0], ray.eye[1], ray.eye[2]) (ray.dir[0], ray.dir[1], ray.dir[2]). ray hit SPHERE(*) obj->expr[0], obj->expr[1], obj->expr[2], obj->expr[3] כ. (b) ray hit SPHERE(*) obj ray t כ, -1 כ. A 1 כ, כ? (c) (X) C/C++. (d) ray hit SPHERE(*) line (1) line (4) כ. (, ),,. (e),,. (f) compute point and normal() pt[k] norm[k]. (Y) C/C Phong Cg (vertex shader). ModelViewProj, ModelView, ModelViewIT. (a) (X) Cg. (b) (Y) Cg. (c), 0?. (d), 3? ( כ ) m. (a). (b) ( ) 3:00 -
47 (3/8) typedef enum { SPHERE, BOX, POLYHEDRON OBJECT TYPE; typedef struct object { OBJECT TYPE obj type; double *expr; double ka[3], kd[3], ks[3], n; struct object *next; OBJECT; OBJECT *obj list; typedef struct ray { double eye[3], dir[3]; RAY; RAY ray; #define SET RAY EYE ray.eye[0] = cam.e[0], ray.eye[1] = cam.e[1], ray.eye[2] = cam.e[2]; #define DOT PROD3(a, b, res) res = a[0]*b[0] + a[1]*b[1] + a[2]*b[2] double ray hit SPHERE(OBJECT *obj) { int k; double A, B, C, D, Dsqrt, t; double eminusg[3]; A = 1; for (k = 0; k < 3; k++) eminusg[k] = ray.eye[k] - obj->expr[k]; DOT PROD3(ray.dir, eminusg, B); B *= 2.0; DOT PROD3(eminusg, eminusg, C); C -= (X); D = B*B - 4.0*A*C; if (D < 0.0) return -1.0; // line (1) Dsqrt = sqrt(d); if ((t = 0.5*(-B - Dsqrt)/A) >= 0.0) return t; // line (2) if ((t = 0.5*(-B + Dsqrt)/A) >= 0.0) return t; // line (3) return -1; // Line (4) void compute point and normal(object *obj, double t, double *pt, double *norm) { int k; if (obj->obj type == SPHERE) { for (k = 0; k < 3; k++) { pt[k] = ray.eye[k] + t*ray.dir[k]; norm[k] = (Y); else void ray hit(object **this obj, double *t) { OBJECT *cur obj; double cur t; *this obj = NULL; *t = -1.0; for (cur obj = obj list; cur obj; cur obj = cur obj->next) { if (cur obj->obj type == SPHERE) cur t = ray hit SPHERE(cur obj); else if (cur t >= 0.0) { if (*t < 0.0) { *t = cur t; *this obj = cur obj; else if (cur t < *t) { *t = cur t; *this obj = cur obj; 1: ( ) 3:00 -
48 (4/8) struct output { float4 position: POSITION; float4 a: TEXCOORD0; float3 b: TEXCOORD1; float3 A: TEXCOORD2; float3 B: TEXCOORD3; ; output main(float4 position: POSITION, float4 normal: NORMAL, uniform float4 light position, uniform float4x4 ModelViewProj, uniform float4x4 ModelView, uniform float4x4 ModelViewIT) { output OUT; OUT.position= mul((x), position); OUT.a = mul(modelview, position); OUT.b = normalize(mul(modelviewit, normal).xyz); OUT.A = normalize(light position - OUT.a).xyz; float3 V = normalize((y)); OUT.B = normalize(out.a + V); return OUT; 2: Phong m 1 I λ = I aλ k aλ + f att (d i ) I li λ {k dλ (N L i )+k sλ (R 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) 3: Phong ( ) 3:00 -
49 (5/8) (c) (d i ). (d). (e) f att (d i ) כ כ, d i. (f) 4 Cg (pixel shader).,. 3 (2)? (g) float4 A = lit(a, b, c); lit() a, b, c כ A, A.x, A.y, A.z כ. ( : ) (h) 3 (2) diffuse כ. 7.. (a) OpenGL (back-tofront) (pre-multiplied color). S D (source color) (destination color), ρ S ρ D כ?. ( co α O ) = ρ S ( cs α S ) + ρ D ( cd 1 (b) (front-toback). ρ S ρ D כ?. ) ) ) ( co α O = ρ S ( αd C D α D ) +ρ D ( αs C S α S (c) test0() 5(a), (1) (2) RGB. ( : RGB כ 0 1 כ ) void rect(glfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat R, GLfloat G, GLfloat B, GLfloat A) { glcolor4f(r, G, B, A); glbegin(gl QUADS); glvertex2f(l, b); glvertex2f(r, b); glvertex2f(r, t); glvertex2f(l, t); glend(); void test0(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc(gl SRC ALPHA, GL DST ALPHA); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); rect(0.0, 4.8, -4.8, 2.0, 0.0, 0.0, 1.0, 1.0); gldisable(gl BLEND); void test1(void) { glclearcolor(0.0, 0.0, 0.0, 0.0); glclear(gl COLOR BUFFER BIT); glenable(gl BLEND); glblendfunc(gl ONE, GL ZERO); rect(-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0); glblendfunc((a), (B)); rect(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); gldisable(gl BLEND); (d) test1() 5(b), (A) (B) כ? ( (1), (2), (3) כ (0, 0, 0), (1, 0, 0), (0, 1, 0) ). GL ZERO, GL ONE GL SRC ALPHA, GL DST ALPHA, ( ) 3:00 -
50 (6/8) struct output { float3 color: COLOR; ; output main(float4 position: TEXCOORD0, float3 normal: TEXCOORD1, float3 L: TEXCOORD2, float3 H: TEXCOORD3, uniform float4 global ambient, uniform float4 light position, uniform float4 light ambient, uniform float4 light diff spec, uniform float4 mat ambient, uniform float4 mat diffuse, uniform float4 mat specular, uniform float mat shininess) { output OUT; OUT.color = global ambient*mat ambient; float3 N = normalize(normal); float NdotL = dot(n, L); if (NdotL >= 0.0) { OUT.color += mat ambient*light ambient; H = normalize(h); float NdotH = dot(n, H); float4 lighting = lit(ndotl, NdotH, mat shininess); float3 diffuse = mat diffuse*lighting.y; float3 specular = mat specular*lighting.z; OUT.color += light diff spec*(diffuse + specular); return OUT; 4: Phong (1) (3) (1) (1) (2) (2) (2) x x (a) test0() (b) test1() 5: ( ) 3:00 -
51 (7/8) GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA 8. OpenGL. (a) 0( ) 3? (b) 6(a) a (preimage), b e a. b, c, d, e (1, 1, 1), (1, 0, 0), (1, 1, 0), (0, 1, 1). a? ( ). (c) 6(b) GL LINEAR, GL NEAREST.,?? (d) 6(c)., GL LINEAR MIPMAP NEAREST, GL LINEAR MIPMAP LINEAR? (f) Phong, Phong? (g)? (h), W כ 1 כ? 9. 7 NVIDIA GeForce 6 Series GPU. (A, B, C, D, E ). (a) OpenGL glblendfunc()? (b)? (c)? (d)? (e) OpenGL gluperspective()? ( ) 3:00 -
52 (8/8) b 1 a c texel 4 e 3 2 d pixel preimage (a) (b) (c) 6: A D B C E 7: NVIDIA GeForce 6 Series GPU ( ) 3:00 -
53 (1/8) (43-170) : כ. כ.. WC,,, כ OpenGL. (a) 1? כ. (b) 1 Mw 1 T(x, y, z), S(x, y, z), R(a, x, y, z),,. (c) 3 Line (a) Line (b) ( x y, ). (d) draw car() 2, draw wheel and nut() draw nut() (wheel 0 nut 0 ) ( ). כ. T(x, y, z), S(x, y, z), R(a, x, y, z),, כ M w M w M w M w M M n0 M 1 n M 4 n0 M 1 n M M 4 n n n0 M 1 n M M 4 n n0 M 1 n M 4 n M b : (e) 3. N M 2: ( ) 6:30 -
54 (2/8) void draw wheel and nut(float angle) { int i; draw wheel(); for (i = 0; i < 5; i++) { glpushmatrix(); glrotatef(72.0*i, 0.0, 1.0, 0.0); gltranslatef(rad-0.5, 0, ww); // rad = 1.7, ww = 1.0 draw nut(); glpopmatrix(); void draw car(void) { float angle y = 0.0, angle z = 0.0; angle y = wheel rot angle in y(); angle z = wheel rot angle in z(); draw body(); glpushmatrix(); gltranslatef(-3.9, -3.5, 4.5); glrotatef(angle y, 0.0, 1.0, 0.0); // Line (a) glrotatef(angle z, 0.0, 0.0, 1.0); // Line (b) draw wheel and nut(angle y); // wheel 0 glpopmatrix(); glpushmatrix(); gltranslatef(3.9, -3.5, 4.5); glrotatef(angle z, 0.0, 0.0, 1.0); draw wheel and nut(0.0); // wheel 1 glpopmatrix(); // draw wheel 2 here // draw wheel 3 here 3: ( ) 6:30 -
55 (3/8) 2.. m 4. S D D S I λ = I aλ k aλ m 1 + f att (d i ) I li λ {k dλ (N L i ) i=0 + k sλ (N H i ) n (a) I aλ, k aλ, d i, I li λ, k dλ, N, L i, k sλ, H i, n. (b). (c). (d) H i?. (e),, כ. (f) 4 כ? (g) 4(b) MC, WC, EC, CC, NDC, WdC OpenGL? (h) 4(b) N L i, כ. כ? כ? (i) n /? (j) Line (a). (k) Line (b) specular כ. 3. (blending). A B (a) A (b) B 5:. (c A α A ) (c B α B ) (pre-multiplied color). F A F B A B α A α B O,. ( co α O ) = F A ( ca α A ) + F B ( cb α B (a),,, A over B F A F B? (b) A, B, C, D, E, F A over B over C over D over E over F. over, over. (Hint: (a + b) + c = a + (b + c)). (c) (front-to-back). RGBA (c D α D )=(α D C D α D ) (c S α S )=(α S C S α S ). 5 A B כ? (d) (c O α O )=(α O C O α O ) α O. ) ( ) 6:30 -
56 (4/8) struct output { float4 position: POSITION; float4 pec: TEXCOORD0; float3 nec: TEXCOORD1; ; output main(float4 position: POSITION, float4 normal: NORMAL, uniform float4x4 ModelViewProj, uniform float4x4 ModelView, uniform float4x4 ModelViewIT) { output OUT; OUT.position= mul(modelviewproj, position); OUT.pEC = mul(modelview, position); OUT.nEC = mul(modelviewit, normal).xyz; return OUT; (a) struct output { float3 color: COLOR; ; output main(float4 position: TEXCOORD0, float3 normal: TEXCOORD1, uniform float nv flag, uniform float4 global ambient, uniform float4 light position, uniform float4 light ambient, uniform float4 light diff spec, uniform float4 mat ambient, uniform float4 mat diffuse, uniform float4 mat specular, uniform float mat shininess) { output OUT; OUT.color = global ambient * mat ambient; float3 N = normalize(normal); float3 L = normalize(light position - position); float NdotL = dot(n, L); if (NdotL >= 0.0) { OUT.color += mat ambient * light ambient; float3 V = normalize(-position); float3 H = normalize( ); // Line (a) float NdotH = dot(n, H); float4 lighting = lit(ndotl, NdotH, mat shininess); float3 diffuse = mat diffuse * lighting.y; float3 specular = mat specular * lighting.z; OUT.color += light diff spec * (diffuse + specular); // Line (b) return OUT; (b) 4: ( ) 6:30 -
57 (5/8) (e) ( ) C O α D, α S, C D, C S. (f) OpenGL, (source factor) (destination factor) כ? כ. GL ZERO, GL ONE GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA (g) 6. BRICK NAGEL RGBA, BRICK A כ 1.0. NAGEL כ A 0.0, 1.0. NAGEL ( A כ 1.0 ) BRICK,. glblendfunc(*, *);. draw NAGEL image(); glenable(gl BLEND); glblendfunc(, ); draw BRICK image(); gldisable(gl BLEND); 4. NVIDIA R. Fernando Programming Graphics Hardware.. Texture filtering is used to compute the color of a screen pixel based on its footprint in the texture map. A pixel of the texture map is usually referred as a (A). When a screen pixel covers one (A) or less - texture (B) -, its color is taken as the closest (A) from the pixel s footprint center, or is computed by (C) filtering, that (a) BRICK (c) 6: (b) NAGEL is (C) interpolation of the four closest (A)s. When it covers several (A)s - texture (D) -,(E) is the preferred solution: Precomputed lower resolution versions of the original texture map - called (F) levels - are stored along with the full resolution version and the right (F) level is selected to come down back to the (B) case. (G) filtering is when (C) filtering is performed twice based on two consecutive (F) levels and the results are averaged together. In addition to the filtering method, (H) filtering can also be optionally selected when performing a texture lookup. (H) filtering increases quality for the cases where the pixel s footprint is elongated in one direction: It consists in performing the filtering computations above at several points in the pixel s footprint along this direction. 5.. (a) 7 η 1 1 I η 2 2, Snell T ( I, N, M, T 1 ). θ ( ) 6:30 -
58 (6/8) c 1 N M refracted T N -N I perf -I 7: T incident, θ 2 sin θ 2 כ כ (I, N, η 1, η 2, θ 1 כ ). (b) T T =sinθ 2 M cos θ 2 N, cos θ 2 כ η 1, η 2, cos θ 1 כ (M N ). (c) 8. ray (ray.eye[0], ray.eye[1], ray.eye[2]) (ray.dir[0], ray.dir[1], ray.dir[2]). ray hit SPHERE(*) obj->expr[0], obj->expr[1], obj->expr[2], obj->expr[3] כ. (d) Line (a) C/C++. (e) ray hit SPHERE(*) obj ray t כ, -1 כ. Line (b) A 1 כ כ,. (f) Line (c) C/C++. (g) Line (d) C/C NVIDIA GeForce 6 Series. (A, B, C, D, E ). (a)? (b)? (c)? (d)? (e)? (f) Hierarchical modeling? (g) Depth buffering? (h) fixed-function pipeline 90 OpenGL? (i) OpenGL כ? (j) 3 כ? (k) OpenGL GL LINEAR MIPMAP LINEAR? ( ) 6:30 -
59 (7/8) typedef enum { SPHERE, BOX, POLYHEDRON OBJECT TYPE; typedef struct object { OBJECT TYPE obj type; double *expr; double ka[3], kd[3], ks[3], n; struct object *next; OBJECT; OBJECT *obj list; typedef struct CAMERA cam; camera { double e[3], u[3], v[3], n[3]; double fovy, aspect; CAMERA; typedef struct window { int w, h; double d; double wc[3], wh, ww; double a[3], b[3], c[3]; unsigned char *pixmap; WINDOW; WINDOW win; typedef struct RAY ray; ray { double eye[3], dir[3]; RAY; #define SET RAY EYE ray.eye[0] = cam.e[0], ray.eye[1] = cam.e[1], ray.eye[2] = cam.e[2]; #define DOT PROD3(a, b, res) res = // Line (a) double ray hit SPHERE(OBJECT *obj) { int k; double A, B, C, D, Dsqrt, t; double eminusg[3]; A = 1; // Line (b) for (k = 0; k < 3; k++) eminusg[k] = ray.eye[k] - obj->expr[k]; DOT PROD3(ray.dir, eminusg, B); B *= ; // Line (c) DOT PROD3(eminusg, eminusg, C); C -= obj->expr[3]*obj->expr[3]; D = B*B - 4.0*A*C; if (D < 0.0) return -1.0; Dsqrt = sqrt(d); if ((t = 0.5*(-B - Dsqrt)/A) >= 0.0) return t; if ((t = 0.5*(-B + Dsqrt)/A) >= 0.0) return t; ; // Line (d) void ray hit(object **this obj, double *t) { OBJECT *cur obj; double cur t; *this obj = NULL; *t = -1.0; for (cur obj = obj list; cur obj; cur obj = cur obj->next) { if (cur obj->obj type == SPHERE) cur t = ray hit SPHERE(cur obj); elsẹ. if (cur t >= 0.0) { if (*t < 0.0) { *t = cur t; *this obj = cur obj; else if (cur t < *t) { *t = cur t; *this obj = cur obj; 8: ( ) 6:30 -
60 (8/8) A D B C E 9: NVIDIA GeForce 6 Series Architecture ( ) 6:30 -
61 (1/4) (43-170) : 1.. (a) OpenGL? (b) OpenGL? (c) OpenGL : depth test, backface culling, viewing transform, perspective division, texture mapping (d) NVIDIA GeForceFX programmable GPU,? (e) programmable GPU כ? (f) 6 BSPT Quake 3 BSPT,. (g) BSPT (frontto-back) (sorting). BSPT n, כ? (h)? (i). כ, כ? (j) (preimage)? 2. 1 E. Haines Real-Time Rendering. 3. / (Application A, Geometry G, Rasterizer R ). (a) Pixel shader (b) BSPT (c) Blending (d) Perspective division (e) Viewing transformation (f) Collision detection (g) Vertexshader (h) Texture mapping (i) Depth buffering (j) Backface culling 3.. (a). GLfloat li pos[4] = f(a), (B), (C), 1.0 g;. glmatrixmode(gl MODELVIEW); glloadidentity(); glulookat(v[0], v[1], v[2], c[0], c[1], c[2], 0.0, 1.0, 0.0);,. gllightfv(gl LIGHT0, GL POSITION, li pos); :00 -
62 (2/4) 1:, (A), (B), (C). (b), M 1! M 2! M 3, OpenGL glmultmatrixf() ( GLfloat m1, m2, m3, mi1, mi2, mi3. ). (c) (10:0; 0:0; 0:0). y, x, z., (A) (B). glmatrixmode(gl MODELVIEW); glloadidentity(); glrotatef( (A) ); gltranslatef( (B) ); 4.. S D. (c S ff S ) (c D ff D ) (pre-multiplied color) S D 2: 1.. ψ! ψ ψ c O = F S + F D ff O! c S ff S! c D ff D (a) (0:8; 0:0; 0:0; 0:8), כ כ? (b) F S = 1 ff D F D = 1 כ. (c) 2 F S F D? (d) 3 (a). (b) 4. (A) (B) OpenGL ( (0.0, 0.0, 0.0, 0.0) ) :00 -
63 (3/4) (a) (b) 3: 2 void blend(void) f glblendfunc(gl ONE, GL ZERO); draw rectangle(-2.0, 4.0, -2.0, 4.0, 1.0, 1.0, 1.0, 1.0); glblendfunc( (A), (B) ); draw rectangle(-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0); g 4: GL ZERO, GL ONE, GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA display bspt back to front() viewer[3], (back-to-front) bspt. 5.. (a),, כ. (b),, כ. (c) (2:0; 3:0; 1:0) ( 2:0; 4:0; 1:0), (0:0; 0:0; 0:0) P N (0:0; 1:0; 0:0), R כ ( ). (d). X m 1 I = I a k a + f att (d) I li fk d (N i L i )+k s (N i H i ) n g i=0 6. Binary Space Partitioning Tree. 5 (a) (A) C. BSPT FRONT BSPT BACK. (b) (B), (C), (D), (E) C. (c) bspt OpenGL. (F) C :00 -
64 (4/4) typedef struct f int nv; // number of vertices float *vertex; // pointer to vertex data float *normal; // pointer to normal data float plane[4]; // plane equation g Polygon; typedef struct bspt f // data structure for bspt Polygon *poly; struct bspt *fchild; // for the front side struct bspt *bchild; // for the back side g BSPT; int check side(float *pos, Polygon *poly) f (A) g BSPT *bspt; // object in BSPT float viewer[3]; // camera position. void display bspt back to front(bspt *bspt, float *viewer) f int viewer side; if (bspt == NULL) return; viewer side = check side(viewer, bspt->poly); if (viewer side == BSPT BACK) f display bspt back to front( (B), viewer); draw bspt poly(bspt->poly); display bspt back to front( (C), viewer); g else f /* viewer side == BSPT FRONT */ display bspt back to front( (D), viewer); draw bspt poly(bspt->poly); display bspt back to front( (E), viewer); g g void display(void) f glblendfunc( (F) ); glenable(gl BLEND); glclear(gl COLOR BUFFER BIT GL DEPTH BUFFER BIT); display bspt back to front(bspt, viewer); glutswapbuffers(); g 5: BSPT :00 -
65 "f"f"fy y <Æ <Æ <Æ /BN/BN/BNõΦõΦõΦ@/@/@/ <Æ <Æ <Æ ( ( ( ÉÓÉÓÉÓ' ' ' <Æ <Æ <ÆõΦõΦõΦ lfflfflff í í í ( ( ( ÉÓÉÓÉÓ' ' ' Õ Õ Õ AνAνAνi Λi Λi ΛÛ Û Û lfflfflff ú ú ú ± ± ± (1/4) lff í ( ÉÓ' Õ Aνi ΛÛ (43-170) lff ú ± à à à : <Æ ( ÉÓ' <ÆõΦ e ffξ $íω 1. 6 ëνh]j ú fl Λ. (a) OpenGL fi sffáôλ ffξ "f ; x_ffi "îω 4Sq >ρíss sffã ' & fflh a >ρ fflh? (b) 6 E$ ffi8a A ρξíss ` OpenGL fi sffáôλ ffξ "fã ' & fflhíνh"f@/ Ð P±fl Λ. (1) AνÛ ' o, (2)ÂÓeçΩ μξ 8, (3)Λ sff h A >ρíss, (4)%7 Û 2X BνiçΩ (c) 6 E$ ffi8a A ρξíss ` OpenGL fi sffáôλ ffξ "fã ' & fflhíνh"f@/ Ð P±fl Λ. (1) %7 Û 2X BνiçΩ, (2)ÂÓeçΩ ô»ç ]X±éSS, (3) Ò o ú D +Ë(blending), (4) U sff!q( a A (d) OpenGL E$ ffi8a A fi sffáôλ ffξ "f %7 Û 2X BνiçΩ Ñ t Ð ffflëχq[ t#q fflh áôaνõ ΞàÔ $íωfl fflh 4 tff &ñω Ð fflh Á %ÁΨ ffξ? (e) 6 Õ Aνi ΛÛ >ρíss Πæ OpenGL fi sffáô Λ ffξ "f & sff &#Q e tff ú Ér >ρíss ` P±fl Λ. (1) ; x_ffi "îω 4Sq_ffi &hλ6 x, (2) BSPT >ρíss, (3) Πæ[ρt ffi ±, (4) Ér μξ ]jfi, (5)%7 Û 2X a _ffi μξ 8, (6)ÈÒ%òΩ μξ 8 (f) = Gtff&h Z>± ρξíss (per-vertex operation)õφ i Λ!sqZ>± ρξíss (per-pixel operation)_ffi ffiâω>ρ & fflh E$ ffi8a A ρξíss Ér Á %ÁΨ ffξ? (g) %7 Û 2X è S!ν "f jφ»h 9±' Ð sff Ξ+ A 9±' a%~ Ér ffiμ±õφ ú fflh fl fflhx<, è_ffi &ñω d Kν4R õφ ρξ Õ χq +Éffi? ú ` ú fl Õ sffä [O±"îΩfl Λ Ér ΏBjΛ _ffi 'aô»ç ëνh]jsff. (a) ílff Iν, 7 ΏBjΛ áôyue sff èνh a >ρ a õφ 9±uff &#Q e fflh Iν "f, ΏBj Λ Λ fflh # M 1 M 2 M 3 íνh"f Ð μξ 8 ` fl %i μξ, Õ ffiâωä ÂÓeçΩ μξ 8 ` KνÅÒ fflh OpenGL ï $íωfl Λ (0A_ffi [j ' >= Ér y y GLfloat ff 9Φ_ffi í ffξ' μξã m1, m2, m3 offvff fflh /BM $ &#Q e, Õ ' >=[ t_ffi %iλ' >= Ér y y mi1, mi2, mi3 offvff fflh/bm $ &#Q e 6. ). Õ aë> 2: Λ sffh A >ρíss (b) ílff Iν Ð ÅÒ#Q ffξ ΏBjΛ C 0 = ((000),(100),(010),(001)) ffξ Ώ BjΛ ± 6 xφ ` : xfl # C 1 = (( 1000),(0 0 1), (010),(1 0 0))ü< ú Ér Iν Ð μξ 8 sff &%3 ` M:_ffi Aνü< ú Ér ÂÓeçΩ μξ 8 ï Òqty fl Φ. glmatrixmode(gl MODELVIEW); glloadidentity(); glmultmatrixf(cam.mat); gltranslatef((a), (B), (C)); i. (A), (B), Õ off (C) [ t#q ú?/6 x Ér? ii. `ffi Π Ér μξ 8 ` 0Afl # cam.matsff$ Kν» +É 4' 4 P± μξ 8 ' >= Ér? 3. 6 Ér Λ sffh A >ρíss 'aô»ç ëνh]jsff. (a) &h Ffig"é, îω' Ffig"é, Õ off ìfiríss Ffig"é ` qff +É M: >ρíss qff6 xsff Zρ Ér ffi ΨÜ ÐÂÒ' ú ÉríνH"f Ð P±fl Λ. (b) ; x I%sff`çΩ, e Ï?@ I%sff`çΩ, Õ off Ä χq I%sff`çΩ` qff +É M:>ρíSS qff6 xsff Zρ Ér ffi Ψ Ü ÐÂÒ' ú ÉríνH"f Ð P±fl Λ. (c) 0A_ffi [j tff I%sff`çΩ ~ ÓZOΦ Πæ LERPõΦ 'a>ρ &hλ Ér ffi Ψ Ér? (d) Õ aë> 1_ffi d Λ "fsff ô»ç ÂÒìfir` tff&hλfl `ffi >ß 5gΛ. (e) Õ aë> 2 fflh Õ aë> 1_ffi d Λ_ffi #Q "Ξ μξã ü< 'a μξsff U ` ffi? (f) Õ aë> 1_ffi d Λ "fώbjλ "fπ Λ Ð fflh ~ Ó Ó %òω Ó` ~ÃÎ fflh μξã P±fl Λ ffiξ 6 Z4 17 9± Êê 7:00 -
66 "f"f"fy y <Æ <Æ <Æ /BN/BN/BNõΦõΦõΦ@/@/@/ <Æ <Æ <Æ ( ( ( ÉÓÉÓÉÓ' ' ' <Æ <Æ <ÆõΦõΦõΦ lfflfflff í í í ( ( ( ÉÓÉÓÉÓ' ' ' Õ Õ Õ AνAνAνi Λi Λi ΛÛ Û Û lfflfflff ú ú ú ± ± ± (2/4) m 1 I λ = I aλ k aλ + f att (d) I li λ {k dλ (N L i )+k sλ (N H) n i=0 Õ aë> 1: Λ sffh A >ρíss à d Λ (g) Õ aë> 1_ffi d Λ "f Óüt^ _ffi 0Auffü< ~ Ó Ósff Π 7fl%3 ` M: %òω Ó` ~ÃÎ fflh μξã P± fl Λ Ér Ò o ú D +Ë 'aô»ç ëνh]jsff. _ffi sffpfftff Aü< B_ffi # Òqty fl Φ. (c A α A )ü< (c B α B ) x & fflh o è_ffi pffoff Y Lô»ÇÒ o ú (pre-multiplied color)sff Λ fl Φ. F A ü< F B y y Aü< B_ffi o è "f_ffi α A ü< α B _ffi qffö± Ð >rfνfl fflh pffwnφφ [ t Πæ ffiμ±õφ sffpfftff O ú z fflh pffwnφφ _ffi qffö± sffλ fl μξ, +Ë$íΩ_ffi ffiμ±õφ Òqt$íΩ & fflh pffoff Y Lô»ÇÒ o ú Ér 6 õφ ú. ( co α O ) = F A ( ca α A ) + F B ( cb α B (a) ëss F A = α B sff F B =1 α A 9± ffiâωä #Q* ô»ç ~ Ód ΛÜ Ðsffpfftff +Ë$íΩsff & fflhtff [O±"îΩfl Λ. sffä lffõüt +Éffi Ψ. (b) ÈÒ"îΩô»Ç Óüt^ E$ ffi8a Afl fi, îss >h 1px_ffi lff òõφ, %7 Û 2X_ffi D +Ë, Φ pwffî qoff#qdçω lffzoφ[ t` & fl fflhx<ä 6 xfl >ß± 6 xsff & fflh A over B ρξíss _ffi ffiâωä F A ü< F B fflh y y O±Ξ ffξ? (c) #Q "Ξ i Λ!sq_ffi pffoff Y Lô»Ç Ò o ú sff (0.5, 0.5, 0.5, 0.5)sffΛ μξ, sff i Λ!sq Ér #Q "Ξ RGB Ò o ú Ð#Qb G>ß 9±Kν4R e fflh Iν ffξ? (d) çss ÈÒ"îΩô»Ç Óüt^ [ t` ΏBjΛ lffïfirü Ð fl # +' e fflh ffi ΨÂÒ' rff fl # ú Ü Ð μξ"f Ψ YV@/ Ð Õ χ9åòχ9 ô»ç. OpenGL_ffi Ò o ú D +Ë lff0px` ± 6 xfl χ9 +É M:, "é rff ffξφ (source factor)ü< 3lq&hΛ ffξ Φ (destination factor) Ð #Q "Ξ ú ` ± 6 x Kν» +Éffi? 6 ú [ t Πæ &hλ]x±ô»ç ffξφ Ξ fl Λ. GL ZERO, GL ONE GL SRC ALPHA GL DST ALPHA GL ONE MINUS SRC ALPHA GL ONE MINUS DST ALPHA 5. 6 Ér %7 Û 2X 9±' a A 'aô»ç ëνh]jsff. ) ffiξ 6 Z4 17 9± Êê 7:00 - (a) YU6 2_ffi x9φë s %7 Û 2X_ffi ô»ç %7!sqsff ff?/ fflh %òω%iλ_ffi μξ&hλ Ér YU6 5_ffi x9φë s %7 Û 2X_ffi ô»ç %7!sqsff ff?/ fflh %òω%iλ_ffi μξ&hλ_ffi Y>fi Cν 9±ffi? (b) Kν sff y %7!sq GL UNSIGNED BYTEü< GL RGBA + Ad Λ` ± 6 xfl fflh %7 Û 2X # fflh 0pxô»Ç # x9φë s` $íω +É ffiâω Ä O±Ξ ëss pu_ffi %7 Û 2X Bj off 9± +É ffi (>ρíss õφ&ñω` lffõüt +Éffi Ψ)? (c) Õ aë> 3(a) "f a fflh i "é (preimage)_ffi Πæ&h ` offvff, bâò' effi tff fflh a í <Êfl fflh ÅÒ μξ %7!sq_ffi Πæd &h ` ff p. b, c, d, Õ off e tff&h _ffi %7!sq Ò o ú sff y y (1, 1, 1), (1, 0, 0), (1, 1, 0), Õ off (0, 1, 1)sffΛ fl Φ. y y jφ»h 9±' ü< Ξ+ A 9±' ± 6 x +É ffiâωä a # >ρíss & fflh Ò o ú Ér Á %ÁΨsff cffi?, 9± fl μξ ì Íì Íì Í rffrffrff >ρíss õφ&ñω` 1SS) Λ. (sff Õ aë> "f ÕüwΦ fflh fi qffö± ` ff ÍÇr.) (d) Õ aë> 3(b) fflh è 9±' fflh GL LINEAR MIPMAP LINEAR, 9±' fflh GL NEAREST ± 6 xô»ç ffiâωä _ffi E$ ffi8a A ffiμ±õφsff. õφ ρξ sff Õ aë>_ffi S!ν Ér è S!νsff 1ÏÒqtô»Ç ffi Ψ ffξtff, mff μξ S!νsff 1ÏÒqtô»Ç ffi Ψ ffξtff ^ &hλü Ð lffõüt fl Λ. (e) Õ aë> 3(c) fflh è S!νsff 1ÏÒqtô»Ç ffiâωä sff. "f Ð Ér YU6 _ffi x9φë s %7 Û Kν"f "f Ð Ér Ò o ú _ffi %7 Û 2X sffpfftff ± 6 xfl %i fflhx<, õφ ρξ sffõ aë> Ér Ξ+ A 9± ' (trilinear interpolation filter) ± 6 xô»ç ffiμ±õφλ +É Ã e fflh? V/ mff Ð ú fl Õ XO >ß ú ô»ç sffä 1SS) Λ.
67 "f"f"fy y <Æ <Æ <Æ /BN/BN/BNõΦõΦõΦ@/@/@/ <Æ <Æ <Æ ( ( ( ÉÓÉÓÉÓ' ' ' <Æ <Æ <ÆõΦõΦõΦ lfflfflff í í í ( ( ( ÉÓÉÓÉÓ' ' ' Õ Õ Õ AνAνAνi Λi Λi ΛÛ Û Û lfflfflff ú ú ú ± ± ± (3/4) b 1 a c texel 4 e 3 2 d pixel preimage (a) (b) (c) Õ aë> 3: %7 Û 2X 9±' a A 6. 6 Ér Binary Space Partitioning Tree (BSPT) 'aô»ç ëνh]jsff. Õ aë> 4_ffi <Êà display bspt back to front() fflh rff&h _ffi 0A uff viewer[3] ÅÒ#Q& ` M:, +' "f ú Ü Ð(back-to-front) μξ"f bspt_ffi y + A[ t` Õ χ9åò fflh <Êà sff. (a) (A) [ t#q ú C ï fflh Á %ÁΨ 9±ffi? (b) (B), (C), (D), (E) [ t#q ú C ï fflh Á %ÁΨ 9±ffi? (c) #Q "Ξ BSPT n>h_ffi y + AÜ Ð $íω sff &#Q e ` ffiâωä, sff BSPT_ffi Zρ sff(height) fflh j è O±Ξ "f j@/ O±Ξ ffi tff 0pxô»Ç? Big-Olff ñ ± 6 xfl # lff Õütfl Λ. (d) los() <Êà fflh start tff&h e fflh ± ÃÐsff end tff&h _ffi ± ÃÐ` ^ffi à e fflhtff ffiμ±&ñωkν ÅÒ fflh <Êà Ð"f, ^ffi à e Ü μξ 1 ú `, Õ off ^ffi à OflÜ μξ 0 ú ` off Ξ Kνïfir. # lff "f ëνhð o <Êà AAA() fflh #Q "Ξ ffiâωä #Q "Ξ ú ` off ΞKνÅÒ fflh <Êà 9±ffi? (e) sff <Êà "f (F)ü< (G) [ t#q ú C ï fflh Á %ÁΨ 9±ffi? (f) sff <Êà "f ú 3lw )a ÂÒìfir` tff&hλfl 5gΛ ffiξ 6 Z4 17 9± Êê 7:00 -
68 "f"f"fy y <Æ <Æ <Æ /BN/BN/BNõΦõΦõΦ@/@/@/ <Æ <Æ <Æ ( ( ( ÉÓÉÓÉÓ' ' ' <Æ <Æ <ÆõΦõΦõΦ lfflfflff í í í ( ( ( ÉÓÉÓÉÓ' ' ' Õ Õ Õ AνAνAνi Λi Λi ΛÛ Û Û lfflfflff ú ú ú ± ± ± (4/4) typedef struct bspt { // data structure for bspt Polygon *poly; struct bspt *fchild; // for the front side struct bspt *bchild; // for the back side BSPT; void display bspt back to front(bspt *bspt, float *viewer) { int viewer side; if ( (A) ) return; viewer side = check side(viewer, bspt->poly); if (viewer side == BSPT FRONT) { display bspt back to front( (B), viewer); draw bspt poly(bspt->poly); display bspt back to front( (C), viewer); else { display bspt back to front( (D), viewer); draw bspt poly(bspt->poly); display bspt back to front( (E), viewer); int los(bspt *bspt, float *start, float *end) { int cs, ce, side0, side1; if (!bspt) return 1; cs = check side(start, bspt->poly); ce = check side(end, bspt->poly); if ((cs == BSPT FRONT) && (ce == BSPT FRONT)) { return los(bspt->fchild, start, end); else if ((cs == BSPT BACK) && (ce == BSPT BACK)) { return los(bspt->bchild, start, end); else { if (AAA(bspt->poly, start, end) return 0; side0 = los( (F), start, end); side1 = los( (G), start, end); return side0 side1; Õ aë> 4: BSPT 'a μξ <ÊÃ ffiξ 6 Z4 17 9± Êê 7:00 -
69 "f"f"fy y <Æ <Æ <Æ /BN/BN/BNõΦõΦõΦ@/@/@/ <Æ <Æ <Æ ( ( ( ÉÓÉÓÉÓ' ' ' <Æ <Æ <ÆõΦõΦõΦ lfflfflff í í í ( ( ( ÉÓÉÓÉÓ' ' ' Õ Õ Õ AνAνAνi Λi Λi ΛÛ Û Û lfflfflff ú ú ú ± ± ± (1/4) lff í ( ÉÓ' Õ Aνi ΛÛ lff ú ± (43-170) ì Íì Íì Í: <Æ <Æ <ÆõΦõΦõΦ: <Æ <Æ <Æ Ξ Ξ Ξ: sffsffsff2 2 2 : 1. 6 ëνh]j ú fl Λ. (a) OpenGL fi sffáôλ ffξ "f glenable (GL CULL FACE); ëνh sff [O±&ñΩfl fflh >ρíss sff z ]j Ð Ã ' sff & fflh a >ρ fflh? A E B (b) OpenGL fi sffáôλ ffξ "f ; x_ffi "îω 4Sq >ρíss sffã ' & fflh a >ρ fflh? (c) >ρ8 x&hλ 4Sqa A lffzoφ` sff6 xfl # Óüt^ Õ wn= M: V,οsff Ä Ξ ÃÐÒ o` fl fflh ffi Ψsff ffi8 òö± &hλsff "Λ fflh ÅÒ sff ú fflhtff d 2;tff ú fl, Õ sffä [O±"îΩfl Λ. (d) OpenGL fi sffáôλ ffξ "f_ffi i Λ!sq X<sff', 7 áôaνõ ΞàÔ í <Êfl fflh W1 tff &ñω Ð fflh Á %ÁΨ ffξ? a. b. c. d. (e) %7 Û 2X è(minification) S!ν "f jφ»h 9±' Ð sff Ξ+ A 9±' a%~ Ér ffiμ±õφ ú fflh fl fflhx<, è_ffi &ñω d Kν4R õφ ρξ Õ χq +Éffi? ú ` ú fl Õ sffä [O± "îωfl Λ. D lffõütfl Λ C 1.0 Õ aë> 1: sff Ξ+ A ÐçSS void too bad(double f, double g, double h) f g int i; for (i = 0; i < 3; i++) f g A[i] = B[i] + f/g; C[i] = D[i] + f*h/g; a. b. 3. Õ aë> 1 "f A, B, C, D y &h _ffi Ò o ú sff y y (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 1, 1)sffΛ fl Φ. sff X<sff' sff6 xfl # E&h "f_ffi Ò o ú ` sff Ξ+ A ÐçSS ` : xfl # fl Λ. (>ρíss õφ&ñω"îωlff +Éffi Ψ.) 2. 6 # áô ÐÕ AνψQ 9Φ "f j &hλ o fl χ9 ô»ç. +É Ã e fflh ~ ÓZOΦ tff ffiξ 6 Z4 14 9± Êê 4:00 -
70 "f"f"fy y <Æ <Æ <Æ /BN/BN/BNõΦõΦõΦ@/@/@/ <Æ <Æ <Æ ( ( ( ÉÓÉÓÉÓ' ' ' <Æ <Æ <ÆõΦõΦõΦ lfflfflff í í í ( ( ( ÉÓÉÓÉÓ' ' ' Õ Õ Õ AνAνAνi Λi Λi ΛÛ Û Û lfflfflff ú ú ú ± ± ± (2/4) 4. ëss # χqìfirsff OpenGL` ± 6 xfl # 3Ψ "é >ß e Φ'p ffξ` ]j ô»ç +É M:, sff èáôàôj?#q fflh à OΦ rffçss [O±"îΩô»Ç Π ü< ú sff Application YU 6, Geometry YU6, Pixel YU6 1px [j YU6 Ð $íω +É Ã e. 6 õφ ú Ér ρξíss ` Òqty fl Φ. (1) U sff!q( a A, (2) Πæ[ρt ffi ±, (3) %7 Û 2X BνiçΩ, (4) ÈÒ%òΩ μξ 8, (5) BSPT sff6 xô»ç ÂÓ Óüt ^ ]jfi, (6) Ò o ú ^ E$ `çω, (7) ; x_ffi "îω 4Sq_ffi &hλ6 x, (8)"é Φ»H Ðüw!lr (a) Application YU6 >ρíss õφ ρξ 'asff e fflh ρξíss _ffi Ξ ñ P±fl Λ. (b) Geometry YU6 >ρíss õφ ρξ 'asff e fflh ρξíss _ffi Ξ ñ P±fl Λ. (c) Pixel YU6 >ρíss õφ ρξ 'asff e fflh ρξ íss _ffi Ξ ñ P±fl Λ. 5. _ffi sffpfftff Aü< B_ffi # Òqty fl Φ. (c A ff A )ü< (c B ff B ) 6 x & fflh o è_ffi pffoff Y Lô»Ç Ò o ú (pre-multiplied color)sffλ fl Φ. F A ü< F B y y Aü< B_ffi o è "f_ffi ff A ü< ff B _ffi qffö± Ð >rfνfl fflh pffwnφφ [ t Πæ ffiμ±õφ sffpfftff O ú z fflh pffwnφφ _ffi qff Ö± sffλ fl μξ, +Ë$íΩ_ffi ffiμ±õφ Òqt$íΩ & fflh pffoff Y Lô»Ç Ò o ú Ér 6 õφ ú. ψ! c O ff O = F A ψ! ψ c A + F B ff A! c B ff B (a) ëss F A =1 ff B sff F B = ff A 9± ffiâωä #Q* ô»ç ~ Ód ΛÜ Ð sffpfftff +Ë$íΩsff & fflh tff [O±"îΩfl Λ. (sffä [O±"îΩ +Éffi Ψ.) (b) A over B + AIν_ffi +Ë$íΩ_ffi ffiâωä F A ü< F B fflh y y O±Ξ ffξ? (c) [j _ffi sffpfftff A, B, C_ffi [j >h_ffi ± y + A_ffi z ]j Ò o ú (pffoff Y Lô»Ç Ò o ú sff _ )õφ ú fi ú sff y y (1:0; 0:5; 0:0; 0:25), (0:25; 0:5; 1:0; 0:5), (0:5; 0:5; 0:5; 1:0)sffΛ fl Φ. sffm: +' "f ú Ü Ð(back-to-front) íνh"f Ð over ρξíss ` ± 6 xfl # Ò o ú ` +Ë $íω +É ffiâωä (A ú Aá sff, C +'Aá e ) Ðsff fflh Ò o ú Ér Á %ÁΨsff cffi? ì Í rff>ρíss õφ&ñω` 1SS n=ffi Ψ. +'+'+' μξ μξ μξ ± ± ± 6 x6 x6 x (d) Õ aë> 3 Ér 0A_ffi # ú "f +' Ð (front-to-back) íνh"f Ð Ò o ú ` +Ë$íΩKν ÅÒ fflh OpenGL <Êà sff. ú 3lw )a ÂÒìfir` 5gΛ. (e) Õ aë> 3_ffi ï +' "f ú Ü Ð (backto-front) íνh"f Ð +Ë$íΩfl fflh ï Ð Π Ë #Q 0A_ffi [j ± y + A` +Ë$íΩfl χ9 +É, Ò o ú!q ( (color buffer) RGB GνV,±ü@ ú fi!q( ì Í rff e #Q» +Éffi? ú ` ú fl ì Í rffõ sffä [O±"îΩfl Λ Ér Aν_ffi ; x_ffi "îω 4Sq 'aô»ç ëνh]jsff. X m 1 I = I a k a + f att (d i ) I li fk d (N L i ) i=0 +k s (N H i ) n g # lff"f± 6 x & fflh μξã I a, k a, d i, I li, k d, N, L i, k s, H i, # ú fl Λ. (a) ΏBjΛ "f Π Λ Ð fflh ~ Ó Ó %òω Ó` ~ÃÎ fflh μξã P±fl Λ ffiξ 6 Z4 14 9± Êê 4:00 -
71 "f"f"fy y <Æ <Æ <Æ /BN/BN/BNõΦõΦõΦ@/@/@/ <Æ <Æ <Æ ( ( ( ÉÓÉÓÉÓ' ' ' <Æ <Æ <ÆõΦõΦõΦ lfflfflff í í í ( ( ( ÉÓÉÓÉÓ' ' ' Õ Õ Õ AνAνAνi Λi Λi ΛÛ Û Û lfflfflff ú ú ú ± ± ± (3/4) 8. 6 Ér Binary Space Partitioning Tree (BSPT) 'aô»ç ëνh]jsff. Õ aë> 4_ffi display bspt front to back() Ér rff&h _ffi 0Auff viewer[3] ÅÒ#Q& ` M:, ú "f +' (front-to-back) íνh"f Ð μξ"f BSPT bspt_ffi y + A` E$ ffi8a AKνÅÒ fflh <Êà sff. Õ aë> 2: x9φë s V (b) Ffig"é _ffi 0Auff_ffi μξ o %òω Ó` ~ÃÎ fflh μξã P±fl Λ. (c) Óüt^ _ffi 0Auffü< ~ Ó Ósff Π 7fl%3 ` M: %òω Ó ` ~ÃÎ fflh μξã P±fl Λ. (d) H i fflh #Q "Ξ S!ν "f : yff òö± &hλü Ð ± 6 xsff & fflh? tff ΨΞ` "îωrfffl Λ. a. b Ér x9φbνiçω 'aô»ç ëνh]jsff. (a) Õ aë> 2 fflh è S!ν "f GL NEAREST MIPMAP NEAREST 9±' ± 6 xfl # %7 Û 2X BνiçΩ` ô»ç sffpfftffsff. sffõ aë> "f fflh W1>h_ffi "f Ð Ér YU6 _ffi %7 Û 2X ± 6 xfl e fflhx<, #QÖ ÂÒìfirsff Zρ Ér YU6 _ffi %7 Û 2X ± 6 xfl fflhtff ú fl, Õ sffä lffõütfl Λ. (a) ëνhð o int check side (float *pt, Polygon *poly) <Êà fflh #Q "Ξ 9±` KνÅÒ fflh <Êà ffξ? (b) (A) [ t#q ú ï fflh Á %ÁΨ 9±ffi? (c) (B), (C), (D), (E) [ t#q ú ï fflh Á %ÁΨ 9±ffi? (B) (C) (D) (E) (d) #Q "Ξ BSPT n>h_ffi y + AÜ Ð $íωsff &#Q e ` ffiâωä, sff BSPT_ffi Zρ sff(height) fflh j è O±Ξ "f j@/ O±Ξ ffi tff 0pxô»Ç? Big-O lff ñ ± 6 xfl # lff Õütfl ffξ GL LINEAR MIPMAP LINEAR 9±' ± 6 x +ÉffiâΩÄ sff sffpfftff #Q "Ξ μξ o `ffi ffi? (b) ëss GL NEAREST MIPMAP NEAREST ffiξ 6 Z4 14 9± Êê 4:00 -
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (2/8) 다음과같이설정되어있는데, cam.pos[0] = 0.0, cam.pos[1] = 0.0, cam.pos[2] = 500.0; 이때의 cam.naxis[] 벡터의세원소값을기술하라. Figure
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/8) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 ( 담당교수 : 임인성 ) 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. OpenGL 시스템의각좌표계에대한약어는다음과같으며, 답을기술할때필요할경우적절히약어를사용하라.
More information0503기말고사.dvi
서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/6) [CSE4170: 기초 컴퓨터 그래픽스] 기말고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답안지 공간이 부족할 경우, 답안지 뒷면에 기 술하고, 해당 답안지 칸에 그 사실을 명기할 것. 1. 다음은 OpenGL fixed-function 렌더링
More information서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/9) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거하
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/9) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거하지않음. 1. 다음은색깔혼합 (Color Blending) 에관한문제이다. (c S α S
More information서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/10) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거
서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/10) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거하지않음. b 1 a c texel 4 e 3 2 d pixel preimage (a) 텍셀색깔의계산
More informationMicrosoft Word - cg07-midterm.doc
중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오.
More information서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/7) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당
(/7) [CSE47: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당 답안지 칸에 그 사실을 명기할 것.. 2차원 아핀변환인 이동변환 T (t, t ), 크기변환 S(s, s ), 그리고 회전변환 R(θ)에 대한 3행 3열 행렬들을 고려하자.
More information서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/8) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의
(/8) [CSE47: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의 변환을 위하여 사용 하는가? 답안지 공간이 부족할 경우, 답안지 뒷면에 기 술하고, 해당 답안지 칸에 그 사실을 명기할 것 (i) 투영 참조점이 무한대점 (point at infinit)
More informationŁø·ŸÕ=¤ ¬ ÇX±xÒ¸ 06 - Èpº– 1
그래픽스강의노트 06 - 조명 1 강영민 동명대학교 2015 년 2 학기 강영민 ( 동명대학교 ) 3D 그래픽스프로그래밍 2015 년 2 학기 1 / 25 음영 계산의 필요성 음영(陰影) 계산, 혹은 셰이딩(shading)은 어떤 물체의 표면에서 어두운 부분과 밝은 부분을 서로 다른 밝기로 그려내는 것 모든 면을 동일한 색으로 그리면 입체감이 없다. 2 /
More informationPowerPoint 프레젠테이션
03 모델변환과시점변환 01 기하변환 02 계층구조 Modeling 03 Camera 시점변환 기하변환 (Geometric Transformation) 1. 이동 (Translation) 2. 회전 (Rotation) 3. 크기조절 (Scale) 4. 전단 (Shear) 5. 복합변환 6. 반사변환 7. 구조변형변환 2 기하변환 (Geometric Transformation)
More information0503중간고사.dvi
서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 1/9 [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 담당교수: 임 인 성 답은 반드시 답안지에 기술할 것. 공간이 부족할 경우 반드시 답안지 몇 쪽의 뒤에 있다고 명기한 후 기술할 것. 그 외의 경우의 답안지 뒤쪽이나 연습지 에 기술한 내용은 답안으로 인정 안함. 1. 2차원
More information단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤
중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. l 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오.
More informationMicrosoft Word - cg09-final-answer.doc
기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 성적공고시중간고사때제출한암호를사용할것임. 1. 다음문제에답하시오. (50점) 1) 직교투영 (orthographic projection),
More information0503중간고사.dvi
서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 1/8 [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 담당교수: 임 인 성 답은 연습지가 아니라 답안지에 기술할 것 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의 변환을 위하여 사용 하는가? 답안지 공간이 부족할 경우, 답안지 뒷면에 기 술하고, 해당 답안지 칸에
More informationMicrosoft PowerPoint - lecture15-ch6.ppt
Lighting OpenGL Lighting OpenGL의조명에는 3가지요소가필요 광원 (Lights) 재질 (Materials) 면의법선벡터 (Normals) 321190 2008년봄학기 5/26/2007 박경신 OpenGL Lighting OpenGL Lighting OpenGL에서제공하는조명모델 환경광 / 주변광 (ambient lights) 점광원 (point
More informationMicrosoft PowerPoint - lecture16-ch6
Lighting OpenGL Lighting OpenGL의조명에는 3가지요소가필요 광원 (Lights) 재질 (Materials) 면의법선벡터 (Normals) 321190 2007년봄학기 5/15/2007 박경신 OpenGL Lighting OpenGL Lighting OpenGL에서제공하는조명모델 환경광 / 주변광 (ambient lights) 점광원 (point
More informationMicrosoft Word - cg07-final.doc
기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 성적공고시중간고사때제출한암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오. (20점) 1) 은면제거알고리즘중페인터알고리즘
More informationMicrosoft PowerPoint - NV40_Korea_KR_2.ppt
NV40의 진화 크리스 세이츠 (Chris Seitz) 그래픽의 진보 버츄어 파이터 NV1 1백만 삼각형 Wanda NV1x 2천 2백만 삼각형 Dawn NV3x 1억 3천만 삼각형 Wolfman NV2x 6천 3백만 삼각형 Nalu NV4x 2억 2천 2백만 95-98: 매핑과 Z-버퍼 CPU GPU 어플리케이션 / Geometry Stage Rasterization
More informationuntitled
NV40 (Chris Seitz) NV1 1 Wanda NV1x 2 2 Wolfman NV2x 6 3 Dawn NV3x 1 3 Nalu NV4x 2 2 2 95-98: Z- CPU GPU / Geometry Stage Rasterization Unit Raster Operations Unit 2D Triangles Bus (PCI) 2D Triangles (Multitexturing)
More information(Microsoft PowerPoint - \301\24608\260\255 - \261\244\277\370\260\372 \300\347\301\372)
게임엔진 제 8 강광원과재질 이대현교수 한국산업기술대학교게임공학과 학습목차 조명모델 광원의색상설정 재질 분산성분의이해 분산재질의구현 경반사성분의이해 경반사재질의구현 조명 (Illumination) 모델 조명모델 광원으로부터공간상의점들까지의조도를계산하는방법. 직접조명과전역조명 직접조명 (direct illumination) 모델 물체표면의점들이장면내의모든광원들로부터직접적으로받는빛만을고려.
More informationLet G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is includ
알고리즘설계와분석 (CSE3081(2 반 )) 기말고사 (2016년 12월15일 ( 목 ) 오전 9시40분 ~) 담당교수 : 서강대학교컴퓨터공학과임인성 < 주의 > 답안지에답을쓴후제출할것. 만약공간이부족하면답안지의뒷면을이용하고, 반드시답을쓰는칸에어느쪽의뒷면에답을기술하였는지명시할것. 연습지는수거하지않음. function MakeSet(x) { x.parent
More informationMicrosoft PowerPoint - lecture3-ch2.ppt [호환 모드]
Coordinate Systems Graphics Programming 321190 2014 년봄학기 3/14/2014 박경신 2D Cartesian Coordinate Systems 3D Cartesian Coordinate Systems Cartesian Coordination Systems -x +y y-axis x-axis +x Two axes: x-axis
More informationMicrosoft PowerPoint - lecture11-ch4
Geometric Objects and Transformation 321190 2007 년봄학기 4/17/2007 박경신 OpenGL Transformation OpenGL 은기본적인변환을수행하는함수를제공한다. Translation: 이동변환은 3 차원이동변위벡터 (dx, dy, dz) 를넣는다. Rotation: 회전변환은 axis( 회전축 ) 와 angle(
More information서피스셰이더프로그램 셰이더개발을쉽게! Thursday, April 12, 12
서피스셰이더프로그램 셰이더개발을쉽게! 유니티렌더링시스템소개 렌더링패스 셰이더랩 서피스셰이더 데모 2 유니티렌더링시스템 3 Deferred Lighting Rendering Path Dual Lightmapping Post Effect Processing Realtime Shadow LightProbe Directional Lightmapping HDR Gamma
More informationMicrosoft Word - cg12-midterm-answer
중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임.. 맞으면 true, 틀리면 false를적으시오.
More informationMicrosoft PowerPoint - lecture11-ch4.ppt
Geometric Objects and Transformation 321190 2007 년봄학기 4/17/2007 박경신 OpenGL Transformation OpenGL 은기본적인변환을수행하는함수를제공한다. Translation: 이동변환은 3 차원이동변위벡터 (dx, dy, dz) 를넣는다. Rotation: 회전변환은 axis( 회전축 ) 와 angle(
More informationOpen GL
Graphics Basic Windows & OpenGL Programming 컴퓨터그래픽스연구실 OpenGL 관련참고사이트 OpenGL 공식사이트 http://www.opengl.org/ Khronos Group http://www.khronos.org/ Nehe Productions http://nehe.gamedev.net/ OpenGL 파일설정 압축을푼후다음경로로파일을복사
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More information단국대학교멀티미디어공학그래픽스프로그래밍기말고사 (2012 년봄학기 ) 2012 년 6 월 12 일학과학번이름 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤
기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. l 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 다음은 oglclass 에서제공하는
More informationPowerPoint 프레젠테이션
01 OpenGL 과 Modeling 01 OpenGL API 02 Rendering Pipeline 03 Modeling 01 OpenGL API 1. OpenGL API 설치및환경설정 2. OpenGL API 구조 2 01 1. OpenGL API 설치및환경설정 OpenGL API 의상대적위치 System Memory Graphics Application
More informationMicrosoft PowerPoint - 13prac.pptx
Viewing 1 th Week, 29 OpenGL Viewing Functions glulookat() Defining a viewing matrix glortho() Creating a matrix for an orthographic parallel viewing i volume glfrustum() Creating a matrix for a perspective-view
More informationA Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More informationPowerPoint 프레젠테이션
06 Texture Mapping 01 Texture Mapping 의종류 02 Texture Mapping 이가능한객체생성 03 고급 Texture Mapping 01 Texture Mapping 의종류 1. 수동 Texture Mapping 2. 자동 Texture Mapping 2 01 Texture Mapping 의종류 좌표변환 Pipeline 에서
More informationLine (A) å j a k= i k #define max(a, b) (((a) >= (b))? (a) : (b)) long MaxSubseqSum0(int A[], unsigned Left, unsigned Right) { int Center, i; long Max
알고리즘설계와분석 (CSE3081-2반 ) 중간고사 (2013년 10월24일 ( 목 ) 오전 10시30분 ) 담당교수 : 서강대학교컴퓨터공학과임인성수강학년 : 2학년문제 : 총 8쪽 12문제 ========================================= < 주의 > 답안지에답을쓴후제출할것. 만약공간이부족하면답안지의뒷면을이용하고반드시답을쓰는칸에답안지의어느쪽의뒷면에답을기술하였는지명시할것.
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More information슬라이드 제목 없음
Shader Programming on GPU (Cg: C for graphics) 2008 년도 1 학기 서강대학교공과대학컴퓨터공학과 임인성교수 Professor Insung Ihm Dept. of Computer Sci. & Eng. Sogang University, Seoul, Korea (c)2008 서강대학교컴퓨터공학과임인성 (Insung Ihm)
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationMicrosoft PowerPoint - lecture4-ch2.ppt
Graphics Programming OpenGL Camera OpenGL 에서는카메라가물체의공간 (drawing coordinates) 의원점 (origin) 에위치하며 z- 방향으로향하고있다. 관측공간을지정하지않는다면, 디폴트로 2x2x2 입방체의 viewing volume을사용한다. (1, 1, 1) 321190 2007년봄학기 3/16/2007 박경신
More informationMicrosoft Word - cg09-midterm.doc
중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오.
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information<B4EBC7D0BCF6C7D02DBBEFB0A2C7D4BCF62E687770>
삼각함수. 삼각함수의덧셈정리 삼각함수의덧셈정리 삼각함수 sin (α + β ), cos (α + β ), tan (α + β ) 등을 α 또는 β 의삼각함수로나 타낼수있다. 각 α 와각 β 에대하여 α >0, β >0이고 0 α - β < β 를만족한다고가정하 자. 다른경우에도같은방법으로증명할수있다. 각 α 와각 β 에대하여 θ = α - β 라고놓자. 위의그림에서원점에서거리가
More informationStructure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오.
Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, 2018 1 George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오. 실행후 Problem 1.3에 대한 Display결과가 나와야 함) George 그림은 다음과
More information04_오픈지엘API.key
4. API. API. API..,.. 1 ,, ISO/IEC JTC1/SC24, Working Group ISO " (Architecture) " (API, Application Program Interface) " (Metafile and Interface) " (Language Binding) " (Validation Testing and Registration)"
More informationPython과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)
제 5 강. 복소수연산및 을이용한복소수연산 ( 제 2 장. 복소수기초 ) 한림대학교전자공학과 한림대학교 제 5 강. 복소수연산및 을이용한복소수연산 1 배울내용 복소수의기본개념복소수의표현오일러 (Euler) 공식복소수의대수연산 1의 N 승근 한림대학교 제 5 강. 복소수연산및 을이용한복소수연산 2 복소수의 4 칙연산 복소수의덧셈과뺄셈에는직각좌표계표현을사용하고,
More informationMicrosoft PowerPoint - [2009] 02.pptx
원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationMicrosoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt
변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short
More informationMicrosoft PowerPoint - lecture18-ch8
OpenGL Texturing Texture Mapping 321190 2007년봄학기 5/25/2007 박경신 OpenGL 에서텍스쳐맵핑 (texture mapping) 을위한 3 단계 텍스쳐활성화 glenable(gl_texture_2d) 텍스쳐맵핑방법 ( 랩핑, 필터등 ) 정의 gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S,
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationMicrosoft Word - cg08-final-answer.doc
기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 성적공고시중간고사때제출한암호를사용할것임. 1. 다음문제에답하시오. (50점) 1) 표면의법선벡터 (normal vector) N과표면에서광원으로향하는광원벡터
More information제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.
제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More informationChap 6: Graphs
그래프표현법 인접행렬 (Adjacency Matrix) 인접리스트 (Adjacency List) 인접다중리스트 (Adjacency Multilist) 6 장. 그래프 (Page ) 인접행렬 (Adjacency Matrix) n 개의 vertex 를갖는그래프 G 의인접행렬의구성 A[n][n] (u, v) E(G) 이면, A[u][v] = Otherwise, A[u][v]
More information<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>
#include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0
More informationK&R2 Reference Manual 번역본
typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More information슬라이드 1
장연립방정식을 풀기위한반복법. 선형시스템 : Guss-Sedel. 비선형시스템 . 선형시스템 : Guss-Sedel (/0) 반복법은초기근을가정한후에더좋은근의값을추정하는체계적인절차를이용한다. G-S 방법은선형대수방정식을푸는반복법중에서 가장보편적으로사용되는방법이다. 개의방정식에서 인 ( 대각원소들이모두 0 이아닌 ) 경우를다루자. j j b j b j j j
More information확장강의계획서 (2019 년도 1 학기 ) 과목명기초컴퓨터그래픽스과목번호 CSE4170 구분 ( 학점 ) 3 수강대상 수업시간화, 목 12:00~13:15 강의실 2. 선수학습내용 조건을만족하는학부생 성명 : 임인성 홈페이지 : grmanet.sogang.ac.kr/~
확장계획서 (2019 년도 1 학기 ) 과목명기초컴퓨터그래픽스과목번호 CSE4170 구분 ( 학점 ) 3 수강대상 수업시간화, 목 12:00~13:15 실 2. 선수학습내용 조건을만족하는학부생 성명 : 임인성 홈페이지 : grmanet.sogang.ac.kr/~ihm 담당교수 ( 사진 ) E-mail: ihm@sogang.ac.kr 연락처 : 02-705-8493
More information중간고사
중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX
More information; struct point p[10] = {{1, 2, {5, -3, {-3, 5, {-6, -2, {2, 2, {-3, -3, {-9, 2, {7, 8, {-6, 4, {8, -5; for (i = 0; i < 10; i++){ if (p[i].x > 0 && p[i
; struct point p; printf("0이아닌점의좌표를입력하시오 : "); scanf("%d %d", &p.x, &p.y); if (p.x > 0 && p.y > 0) printf("1사분면에있다.\n"); if (p.x < 0 && p.y > 0) printf("2사분면에있다.\n"); if (p.x < 0 && p.y < 0) printf("3사분면에있다.\n");
More informationMicrosoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
More information완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에
1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에대하여 AB=BA 1 가성립한다 2 3 (4) 이면 1 곱셈공식및변형공식성립 ± ± ( 복호동순 ), 2 지수법칙성립 (은자연수 ) < 거짓인명제 >
More informationMicrosoft PowerPoint - lecture17-ch8.ppt
OpenGL Texturing Texture Mapping 321190 2007년봄학기 6/2/2007 박경신 OpenGL 에서텍스쳐맵핑 (texture mapping) 을위한 3 단계 텍스쳐활성화 glenable(gl_texture_2d) 텍스쳐맵핑방법 ( 랩핑, 필터등 ) 정의 gltexparameteri(gl_texture_2d, GL_TEXTURE_WRAP_S,
More informationVector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표
Vector Differential: 벡터 미분 Yonhee Lee October 7, 08 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표기법을 정의하는 방법이다 보통 스칼라(scalar)에 대한 미분은 일분수 함수 f : < < 또는 다변수 함수(function
More information(Microsoft PowerPoint - JXEUOAACMYBW.ppt [\310\243\310\257 \270\360\265\345])
Discrete Techniques Historical Background 1970 년대 : local illumination models Phong shading : plastic 처럼보인다... 1980년대 : realism 의추구 global illumination models high cost, but very realistic texture mapping
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationMicrosoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600
균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at
More informationMicrosoft PowerPoint - IP11.pptx
열한번째강의카메라 1/43 1/16 Review 2/43 2/16 평균값 중간값 Review 3/43 3/16 캐니에지추출 void cvcanny(const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size = 3); aperture_size = 3 aperture_size
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More informationC 언어 프로그래밊 과제 풀이
과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍
More information2005CG01.PDF
Computer Graphics # 1 Contents CG Design CG Programming 2005-03-10 Computer Graphics 2 CG science, engineering, medicine, business, industry, government, art, entertainment, advertising, education and
More informationMicrosoft PowerPoint - LA_ch6_1 [호환 모드]
Chapter 6 선형변환은무질서한과정과공학제어시스템의설계에관한연구에사용된다. 또한전기및음성신호로부터의소음여과와컴퓨터그래픽등에사용된다. 선형변환 Liear rasformatio 6. 6 변환으로서의행렬 Matrices as rasformatios 6. 변환으로서의행렬 6. 선형연산자의기하학 6.3 핵과치역 6.4 선형변환의합성과가역성 6.5 컴퓨터그래픽 si
More informationMicrosoft PowerPoint - lecture2-opengl.ppt [호환 모드]
OpenGL & GLUT OpenGL & GLUT 321190 2011 년봄학기 3/15/2011 박경신 OpenGL http://www.opengl.org/ http://www.sgi.com/software/opengl Windows95 이후 OpenGL 이표준으로들어가있음. ftp://ftp.microsfot.com/softlib/mslfiles/opengl95.exe
More informationPowerPoint 프레젠테이션
@ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 5 강. 배열, 포인터, 참조목차 배열 포인터 C++ 메모리구조 주소연산자 포인터 포인터연산 배열과포인터 메모리동적할당 문자열 참조 1 /20 5 강. 배열, 포인터, 참조배열 배열 같은타입의변수여러개를하나의변수명으로처리 int Ary[10]; 총 10 개의변수 : Ary[0]~Ary[9]
More informationchapter2.hwp
2. 그래픽스프로그래밍의소개 2.1 OpenGL 이란? 2.1.1 OpenGL 의정의 2차원또는 3차원드로잉을위한표준그래픽스라이브러리 - 그래픽스하드웨어에대한소프트웨어인터페이스 - C나 C++ 과같은프로그래밍언어는아님 - 그래픽스하드웨어에잘구현될수있음 -C언어기반라이브러리 - 상태기반아키텍쳐 - 즉시모드 (Immediate mode) 기반 그래픽스라이브러리
More information슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
More informationMicrosoft PowerPoint - chap04-연산자.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에
More information프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음
프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 CHAPTER 9 둘중하나선택하기 관계연산자 두개의피연산자를비교하는연산자 결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. 관계연산자 연산자 의미 x == y x와 y가같은가? x!= y
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More informationMicrosoft Word - cg11-midterm-answer.doc
중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 flse를적으시오.
More informationMicrosoft PowerPoint - 06-Body Data Class.pptx
Digital 3D Anthropometry 6. Body Data Class Sungmin Kim SEOUL NATIONAL UNIVERSITY Body Data Class 의설계 Body Model 의관리 인체데이터입출력 데이터불러오기 인체모델그리기 TOpenGL의확장 프로젝트관리 프로젝트저장 / 불러오기 추가기능구현 좌표축정렬 Face, Wireframe,
More information1 peaieslvfp3 1. 두점사이의거리 수직선위의두점사이의거리를구할수있다. 좌표평면위의두점사이의거리를구할수있다. 수직선위의두점사이의거리 todrkrgo qhqtlek 오른쪽그림은충무로역을중심으로한서울시지하철 3`호선노선도의일부분이다. 충무로역을` 0, 을지로 3`
peaieslvfp. 두점사이의거리 수직선위의두점사이의거리를구할수있다. 좌표평면위의두점사이의거리를구할수있다. 수직선위의두점사이의거리 todrkrgo qhqtlek 오른쪽그림은충무로역을중심으로한서울시지하철 `호선노선도의일부분이다. 충무로역을` 0, 을지로 `가역을 ``로나타낼때, 다음물음에답하여라. 독립문 경복궁 안국종로 가을지로 가충무로동대입구약수금호옥수압구정잠원신사
More information이 장에서 사용되는 MATLAB 명령어들은 비교적 복잡하므로 MATLAB 창에서 명령어를 직접 입력하지 않고 확장자가 m 인 text 파일을 작성하여 실행을 한다
이장에서사용되는 MATLAB 명령어들은비교적복잡하므로 MATLAB 창에서명령어를직접입력하지않고확장자가 m 인 text 파일을작성하여실행을한다. 즉, test.m 과같은 text 파일을만들어서 MATLAB 프로그램을작성한후실행을한다. 이와같이하면길고복잡한 MATLAB 프로그램을작성하여실행할수있고, 오류가발생하거나수정이필요한경우손쉽게수정하여실행할수있는장점이있으며,
More information장연립방정식을풀기위한반복법 12.1 선형시스템 : Gauss-Seidel 12.2 비선형시스템 12.1 선형시스템 : Gauss-Seidel (1/10) 반복법은초기근을가정한후에더좋은근의값을추정하는체계적인절차를이용한다. G-S 방법은선형대수방정
. 선형시스템 : GussSedel. 비선형시스템. 선형시스템 : GussSedel (/0) 반복법은초기근을가정한후에더좋은근의값을추정하는체계적인절차를이용한다. GS 방법은선형대수방정식을푸는반복법중에서 가장보편적으로사용되는방법이다. 개의방정식에서 인 ( 대각원소들이모두 0 이아닌 ) 경우를다루자. j j b j j b j j 여기서 j b j j j 현재반복단계
More information프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어
개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,
More informationMicrosoft PowerPoint - chap13-입출력라이브러리.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,
More informationPowerPoint 프레젠테이션
Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State
More informationMicrosoft PowerPoint - lecture19-ch8.ppt
Alpha Channel Alpha Blending 321190 2007년봄학기 6/1/2007 박경신 Alpha Channel Model Porter & Duff s Compositing Digital Images, SIGGRAPH 84 RGBA alpha는 4번째색으로불투명도 (opacity of color) 조절에사용함 불투명도 (opacity) 는얼마나많은빛이면을관통하는가의척도임
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More information(Microsoft PowerPoint - FZBDPQDCSHAN.ppt [\310\243\310\257 \270\360\265\345])
Graphics Programming 2.1 The Sierpinski Gasket Sierpinski gasket 예제문제로사용 원래, Fractal geometry 에서정의 만드는방법 삼각형을그린다. 삼각형내부에 random 하게점 P i 를선택, 출력 random 하게꼭지점중의하나 V i 선택 V i 와 P i 의중점을 P i+1 로선택, 출력 위과정을반복
More informationShaderX2: DirectX 9 셰이더 프로그래밍 팁 & 트릭
1 1. De a n C a lve r Direct3D ShaderX: &. DirectX 9 (stream).. Dire c tx 9 1.1.... 3.0, 1. 49.. DirectX 8., ( ). DirectX 8 (D3DDEVCAPS2_STREAMOFFSET ), DirectX 9. DirectX 7, FVF.,, DirectX 9, D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET.
More information윈도우즈프로그래밍(1)
제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장
More informationPowerPoint 프레젠테이션
실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3
More informationLIDAR와 영상 Data Fusion에 의한 건물 자동추출
i ii iii iv v vi vii 1 2 3 4 Image Processing Image Pyramid Edge Detection Epipolar Image Image Matching LIDAR + Photo Cross correlation Least Squares Epipolar Line Matching Low Level High Level Space
More informationChap 6: Graphs
AOV Network 의표현 임의의 vertex 가 predecessor 를갖는지조사 각 vertex 에대해 immediate predecessor 의수를나타내는 count field 저장 Vertex 와그에부속된모든 edge 들을삭제 AOV network 을인접리스트로표현 count link struct node { int vertex; struct node
More informationKNK_C_05_Pointers_Arrays_structures_summary_v02
Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",
More information쉽게 풀어쓴 C 프로그래밍
제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace
More information