기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 성적공고시중간고사때제출한암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오. (20점) 1) 은면제거알고리즘중페인터알고리즘 (painter s algorithm) 은이미지공간 (imagespace) 기법이기보다는객체공간 (object-space) 기법이다. 2) DDA (Digital Differential Analyzer) 알고리즘은직선을픽셀로변환하는알고리즘이며부동소수곱셈연산을필요로한다. 3) 임의의복잡한다각형 (polygon) 을단순한다각형 ( 예를들어, 삼각형 ) 으로나누는작업을분할 (tessellation) 이라고한다. _ 4) 중간각벡터 (half-way vector) 는정반사 (specular reflection) 에의한음영계산을빨리해주기위해서사용된다. _ 5) 난반사 (diffuse reflection) 에서입사각 ( 광원벡터와표면의법선벡터사이각 ) 이직각을이룰때표면에빛이가장밝게나타난다. 6) 알파블렌딩 (alpha blending) 사용시불투명과투명을같이그릴때투명을먼저그리고불투명을나중에그린다. 7) Sutherland-Hodgeman 알고리즘은 4비트와 6비트외곽부호 (outcode) 를사용하여 2차원, 3차원클리핑 (clipping) 하는알고리즘이다. _ 8) 투영정규화 (projection normalization) 은객체들을사전왜곡시켜모든투영을직교투영으로변환시킨다. 9) 라디오시티 (radiosity) 와광선추적 (ray tracing) 은직접조명모델 (direct illumination model) 이다. _ 10) 기하학적도형을프레임버퍼안의픽셀의색, 위치로변환시키는것을래스터화 (rasterization) 라고한다. _ 2. 다음문제에답하시오. (50점) 1) 물체를표현하는데있어가장기본이되는요소인기하요소 (geometry primitives) 를 3 가지이상적으시오. 1/9
2) 3개의기본적인기하학적객체의변환 (geometric transformation) 을서술하고, OpenGL 변환함수를적으시오. 3) 다음그림은고전적관측들을보여주고있다. 평행관측 (parallel viewing) 에속하는것에모두동그라미표시하시오. 4) 깊이버퍼알고리즘 (Depth-buffer algorithm) 의작동원리에대하여설명하시오. 2/9
5) 다음은직접조명모델 (Direct illumination model) 을보여주고있다. 이공식에서환경광 (ambient light), 난반사광 (diffuse light), 정반사광 (specular light), 방출광 (emissive light) 이어느것인지표시하라. 그리고이공식에서 α 계수가무엇을의미하는지도설명하라. I { K I ( N L) + K I ( R V } E m = K a I a + 1 d d s s ) + 2 a + bd + cd i= 0 1 α 6) 플랫세이딩 (Flat shading), 구로우세이딩 (Gouraud shading), 퐁세이딩 (Phong shading) 을각각설명하고장단점을비교하여라. 7) 현재프레임버퍼에있는픽셀값 RGB (0.2, 0.2, 0.2) 위에그리고자하는물체의픽셀값 RGBA (0.7, 0.5, 0.0, 0.5) 을가장보편적블렌딩함수인 glblendfunc(gl_src_alpha, GL_ONE_MINUS_SRC_ALPHA) 를사용할때아래의블렌딩공식을사용한다. 알파블렌딩 (alpha blending) 되어화면에출력되는 RGB 색을계산하시오. R = As * Rs + (1 As) * Rd G = As * Gs + (1 As) * Gd B = As * Bs + (1 As) * Bd 3/9
8) OpenGL 함수 gltexenvf(gl_texture_env, GL_TEXTURE_ENV_MODE, mode) 는텍스쳐와음영간의상호작용을지정할수있게한다. GL_TEXTURE_ENV_MODE는 GL_MODULATE, GL_DECAL, GL_BLEND, GL_REPLACE 를지원하는데, 각모드를사용했을때텍스쳐값이어떻게나타나는지설명하시오. ( 아래의모드에따른텍스쳐함수테이블을참고하시오 ) Base internal Texture functions GL_MODULATE GL_DECAL GL_BLEND GL_REPLACE GL_LUMINANCE C v =L t C f undefined Cv=(1 - L t )C f + L t C c C v =L t GL_RGB C v =C t C f C v =C t C v =(1 - C t )C f + C t C c C v =C t GL_MODULATE: GL_DECAL: GL_BLEND: GL_REPLACE: 9) 다각형내부의판단규칙중홀짝규칙 (even-odd rule) 은주사선별로경계가홀수번째교차하면내부, 짝수번째교차하면외부가시작된다고판단한다. 아래그림의다각형에주사선위에홀짝숫자를적어넣어다각형의내부와외부를표시하시오. 4/9
10) 반지름이 1 인구체 (sphere) 의 parametric form 은 π π x = cosφ sinθ, φ, π θ π 2 2 π π y = cosφ cosθ, φ, π θ π 2 2 π π z = sinφ, φ 2 2 로표현된다. 이구체표면의법선벡터 (normal vector) 를구하라. 3. 다음은아래의 opengl.jpg 이미지를사용하여 GL_REPEAT을사용한텍스쳐맵핑프로그램을보여주고있다. 빈칸을채워라. (10점) glbegin(gl_quads); gltexcoord2f(, ); glvertex3f(-1.0, -1.0, 0.0); gltexcoord2f(, ); glvertex3f(1.0, -1.0, 0.0); gltexcoord2f(, ); glvertex3f(1.0, 1.0, 0.0); gltexcoord2f(, ); glvertex3f(-1.0, 1.0, 0.0); 5/9
4. 아래의 drawobjects() 함수를설명하고, display() 함수에서 glortho 직교투영 (orthographic projection) 을사용할때와 gluperspective 원근투영 (perspective projection) 사용할때의차이를설명하시오. (10점) void drawobjects() { gltranslatef(-2.0, 0.0, 0.0); glcolor3f(1.0, 0.0, 0.0); gltranslatef(-1.0, 0.0, -1.0); glcolor3f(0.0, 1.0, 0.0); gltranslatef(0.0, 0.0, -2.0); glcolor3f(0.0, 0.0, 1.0); gltranslatef(1.0, 0.0, -3.0); glcolor3f(1.0, 1.0, 0.0); gltranslatef(2.0, 0.0, -4.0); glcolor3f(1.0, 0.0, 1.0); } void display() { glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); glloadidentity(); glmatrixmode(gl_projection); glloadidentity(); if (ortho) glortho(-10, 10, -10, 10, -10, 10); // 직교투영 else gluperspective(60.0, 1.0, 0.1, 100.0); // 원근투영 6/9
glmatrixmode(gl_modelview); glloadidentity(); gltranslatef(0.0, 0.0, -viewdistance); glrotatef(viewrotx, 1.0, 0.0, 0.0); glrotatef(viewroty, 0.0, 1.0, 0.0); } drawobjects(); glutswapbuffers(); 5. Bresenham 알고리즘을이용해서점 (3,7) 부터점 (12, 15) 까지선을그리고자한다. 아래의조건을이용해서 ( 혹은조건을수정해서 ) 각단계별로결정변수 D k 를구하고점 (vertex) 이그려져야하는 x, y좌표의값을구하라. 표에값이전부채워지지않을수도있으며모자라는경우에는행을추가해서숫자를넣도록한다. (10점) Initialization D 0 = 2Δy Δx Stepwise process If D k < 0, D k +1 = D k + 2Δy Otherwise, D k +1 = D k + 2Δy - 2Δx, y++ D k x y D 0 = 7 3 7 7/9
6. 다음은수업시간에배운 Simple Solar System 예제를보여주고있다. display() 함수의빈칸으로남아있는회전 (rotate) 과이동 (translate) 변환을완성하라. 태양 (sun) 은자전 (spin) 하고있고, 지구 (earth) 는자전 (spin) 하고있으면서태양주위를공전 (revolve) 하고있다. 또한, 달 (moon) 은자전 (spin) 하고있으면서지구주위를공전 (revolve) 하고있는모습이다. ( 보너스문제 extra 10점 ) float g_sunradius = 5.0f; float g_earthradius = 1.0f; float g_moonradius = 0.5f; float g_earthdistancefromsun = -12.0f; float g_moondistancefromearth = -2.0f; void display( void ) { glclear( GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT ); glmatrixmode( GL_MODELVIEW ); glloadidentity(); glulookat( 0.0, 2.0, 25.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 ); static float SunSpin = 0.0f; static float EarthSpin = 0.0f; static float EarthOrbit = 0.0f; static float MoonSpin = 0.0f; static float MoonOrbit = 0.0f; if( g_orbiton == true ) { SunSpin -= g_speed * (g_elpasedtime * 10.0f); // sun rotate } EarthSpin -= g_speed * (g_elpasedtime * 100.0f); EarthOrbit -= g_speed * (g_elpasedtime * 20.0f); // earth rotate // earth revolve MoonSpin -= g_speed *(g_elpasedtime* 50.0f); // moon rotate MoonOrbit -= g_speed * (g_elpasedtime * 200.0f); // moon revolve // The Sun (spins by rotating it about y-axis) 8/9
glutsolidsphere( g_sunradius, 24, 24 ); // The Earth spins on its own axis and orbit the Sun. glutsolidsphere( g_earthradius, 24, 24 ); // The Moon spins on its own axis and orbit the Earth. } glutsolidsphere( g_moonradius, 24, 24 ); glutswapbuffers(); 7. 수업시간에배운내용중가장재미있었던부분 ( 또는본인이좀더자세히배우고싶은내용이있으면 ) 을적으시오. (0점) 9/9