(/7) [CSE47: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당 답안지 칸에 그 사실을 명기할 것.. 2차원 아핀변환인 이동변환 T (t, t ), 크기변환 S(s, s ), 그리고 회전변환 R(θ)에 대한 3행 3열 행렬들을 고려하자. (a) R(θ) S(, ) = S(, ) R(α) 식을 만족 시켜주는 α 값은 무엇인가? (b) T (t, t ) S(, ) = S(, ) T (β, γ) 식을 만족시켜주는 β와 γ 값은 무엇인가? (b) 위에서 구한 행렬 M 은 M = S(s, s ) T (t, t ) R(9)과 같이 세 개의 행렬의 곱 으로 표현할 수 있다. 이때 여기에 들어갈 t, t, s, 그리고 s 값을 3. 그림 2에서와 같이 왼쪽의 윈도우의 내용을 오 른쪽 윈도우 안으로 매핑을 해주는 2차원 아핀변 환에 대한 3행 3열 행렬 M 을 T (t, t ), S(s, s ), 그리고 R(θ) 등의 기본 아핀변환의 합성을 통하 여 구하라 (여기서 왼쪽의 윈도우는 각 변의 길 이가 2이고 중심이 원점이 사각형인데, (i) 합성 과정을 반드시 기술한 후, (ii) 최종 결과 행렬을 기술할 것). (c) R(θ) T (t, t ) = T (δ, ) R(θ) 식을 만족시 켜주는 δ와 값은 무엇인가? 2. (번 문제를 고려하면서) 다음 질문에 답하라. M 6 p 5 Figure 2: 2차원 윈도우 매핑 변환 p' L: = + 4. 그림 3은 주어진 법선 벡터 (normal vector) n = (n n nz )t 에 대하여 4행 4열 행렬 M 이 의미 하는 어떤 아핀변환을 가하는 과정을 보여주고 있다. Figure : 직선에 대한 반사 (a) 그림 에서와 같이 2차원 공간의 점 p = ( )t 를 직선 L : = + 에 대하여 반 사 시켜 p = ( )t 로 변환 해주는 3행 3 열 행렬 M 을 M = N T (, )과 같이 표 현한다고 할 때, 이때의 3행 3열 아핀변환 행렬 N 을 T (t, t ), S(s, s ), 그리고 R(θ) 등의 기본 아핀변환을 통하여 합성하라. Figure 3: 법선 벡터의 변환 (a) 이 아핀변환을 가하여 얻은 벡터 n = (n n nz )t 을 어떤 4행 4열 행렬 N 에 - 26년 4월 22일(금) 오전 : (K 2) c 26 임인성
대하여 n = N n과 같이 표현한다고 할 때, 이 행렬 N 을 M 행렬을 사용하여 표현 하라 (힌트: 다음의 글을 참조할 것). 그림 3에서와 같이 주어진 점 p = ( z )t 에서의 법선 벡터가 n이 라고 하자. 이때 점 p에서의 법 선 평면 상의 임의의 점 p = ( z )t 에 대하여 nt (p p) = 와 같은 관계가 성립한다. p, p, 그리고 n이 변환 행렬 M 에 의해 각각 p = ( z )t, p = ( z )t, n 으로 변환이 된다 고 하면, p = M p와 p = M p 로부터 p와 p 를 구해 위의 관계식 에 대입하여 다음과 같은 식을 얻 게 된다. (b) 위 문제의 아핀변환 M 이 강체변환 (rigidbod transformation)이라고 하자. 이때 M 을 다음과 같이 정의할 때, M = a a2 a3 v a2 a22 a23 v2, a3 a32 a33 v3 이 행렬의 왼쪽-위쪽의 3행 3열 부행렬 M3 3 의 세 개의 열벡터를 각각 a, a2, a3 라 할 때, 이 세 개의 벡터가 만족하는 수학적 인 성질을 벡터의 내적을 사용하여 정확히 (,, 2) (2/7) (,, ) (,, -2) w A (,, ) zw (,, -) B (,, ) w (,, ) (,, -) Figure 4: 두 프레임간의 변환 Mb 를 Mb = T2 R T 와 같이 두 개의 이동 변환 행렬 T, T2 와 한 개의 회전변환 행렬 R의 곱으로 표현하라 (반드시 이 세 개의 4 행 4열 행렬의 내용을 정확히 기술할 것). (c) 위 문제의 R 행렬은 임의의 점을 (, n, nz ) 벡터가 가리키는 직선 둘 레로 α도만큼 회전시켜주는 회전변환에 해당한다. 이때 n 와 nz, 그리고 α 값을 (참고: 그림 5에 주어진 회전변 환 행렬을 참조하고, 각도는 도와 8도 사이의 각으로 기술할 것) 6. 다음은 간단한 모델링 변환에 관한 문제이다. (c) 문제 (b)의 조건하에, 문제 (a)의 행렬 N 의 왼쪽-위쪽의 3행 3열 부행렬 N3 3 의 내용 을 정확히 5. 다음은 두 프레임간의 변환에 관한 문제이다. (a) 그림 4의 A 소는 점 (,, 2)를 원점으로 하는 자신의 프레임을 기준으로 세상 좌표 계에 존재하고 있는데, 이 프레임의 각 축 의 방향이 축 옆에 기술되어 있다. 이때 이 프레임을 (,, -) 방향과 (,, ) 방향 이 각각 세상 좌표계의 w 축과 w 방향과 일치하는 방식으로 세상 좌표계와 일치시 켜주려한다. 이때 필요한 4행 4열 행렬 Ma 의 내용을 (b) 한편 B 소는 점 (,, 2)를 중심으로 하는 프레임을 기준으로 세상 좌표계에 존재하 고 있는데, A 소의 각 꼭지점들을 B 소의 대응되는 점으로 매핑해주는 4행 4열 행렬 Figure 6: 간단한 모델링 변환 그림 6에는 세상 좌표계의 ( 2,, 4) 지점에서 ( 2,, 4) 지점까지의 직선 경로를 따라 균일한 속도로 이동 및 회전을 하는 소의 모습이 도시 되어 있다. 소 물체는 자신의 모델링 좌표계의 m 축 방향을 바라보고 있고, 등은 m 축 방향을 향하고 있는데, m 축 둘레로 총 8도 회전을 하면서 이동하고 있다. 또한 소의 모델링 좌표 - 26년 4월 22일(금) 오전 : (K 2) c 26 임인성
R(α, n, n, nz ) = n 2 ( c) + c n n ( c) n z s n z n ( c) + n s n n ( c) + n z s n 2 ( c) + c n n z ( c) n s n z n ( c) n s n n z ( c) + n s n 2z ( c) + c (3/7) Figure 5: 회전 변환 행렬 for (int i = ; i <= 8; i += 3) { float angle = (float)i; ModelViewMatri = glm::translate(viewmatri, glm::vec3(t, t, tz )); ModelViewMatri = glm::rotate(modelviewmatri, (α)*to RADIAN, glm::vec3(n, n, nz )); ModelViewProjectionMatri = ProjectionMatri * ModelViewMatri; gluniformmatri4fv(loc ModelViewProjectionMatri simple,, GL FALSE, &ModelViewProjectionMatri[][]); gllinewidth(2.f); draw aes(); gllinewidth(.f); draw cow(.3f,.3f,.3f); // cow color = (.3f,.3f,.3f) Figure 7: 간단한 모델링 변환 코드 계의 원점에 해당하는 점은 위의 두 점간의 직 선 상에서 이동을 하고 있다. 그림 7은 이렇게 움직이는 소를 그려주는 프로그램의 일부가 주 어져 있는데, 이 코드가 올바르게 작동하기 위 하여 t, t, tz, α, n, n, 그리고 nz 에 들어갈 값을 정확히 (참고: 변수 ViewMatri 와 ProjectionMatri에는 그 이름이 의미하는 행렬이 이미 계산되어 지정이 되어 있음) 7. 다음은 카메라의 설정에 관한 문제이다. 그림 8 에는 OpenGL Compatibilit Profile에서 제공하 는 glulookat(*) 함수의 호출에 대하여 뷰잉변 환 행렬을 계산하는 과정 (이하 이 그림 )이 주 Figure 8: glulookat(*) 함수를 통한 카메라의 설정 어져 있으며, 그림 9에는 glm::lookat() 함수에 대한 구현 코드 (이하 이 함수 )가 주어져 있는 문장의 smile(*,*) 함수는 두 개의 3차원 데, 이들을 참조하며 답하라. 벡터를 인자로 받아 어떠한 계산을 해줄까? (a) 이 그림에서 이 함수의 인자 중의 하나인 3 (d) 이 함수의 Line (d) 문장 수행 결과 4행 4 차원 벡터 ee에 해당하는 기호의 이름을 열 행렬 Result에는 어떤 값이 저장이 될 까? (b) 이 그림의 u, v, 그리고 n 벡터는 각각 카 메라를 기준으로 오른쪽, 위쪽, 그리고 바 라보는 반대 방향에 대한 단위 벡터 (unit vector)들이다. 이 함수의 Line (a) 문장 수 행 후 벡터 f에 저장되는 값을 위의 벡터들 을 사용하여 정확히 (c) 문맥 상 이 함수의 Line (b)와 Line (c) (e) 문맥 상 이 함수의 Line (e)와 Line (f)의 빈곳에 들어갈 내용을 이 프로그램의 문법 에 맞게 정확히 8. 다음은 원근투영 변환에 관한 문제이다. 그림 에서와 같이 COP(Center of Projecton) 가 (,, )이고 PP(Projection Plane)이 = 9-26년 4월 22일(금) 오전 : (K 2) c 26 임인성
(4/7) namespace glm { template <tpename T, precision P> GLM FUNC QUALIFIER tmat44<t, P> lookat(tvec3<t, P> const &ee, tvec3<t, P> const ¢er, tvec3<t, P> const &up) { tvec3<t, P> const f(normalize(center - ee)); // Line (a) tvec3<t, P> const s(normalize(smile(f, up))); // Line (b) tvec3<t, P> const u(smile(s, f)); // Line (c) tmat44<t, P> Result(); // Line (d) Result[][] = s.; Result[][] = s.; Result[2][] = s.z; Result[][] = u.; Result[][] = u.; Result[2][] = u.z; Result[][2] = -f.; Result[][2] = -f.; Result[2][2] = -f.z; Result[3][] = -dot(s, ee); Result[3][] = ; // Line (e) Result[3][2] = ; // Line (f) return Result; Figure 9: glm::lookat() 함수의 구현 w p COP: (,, ) p' 9 z WC 5 w 5 PP: = 9 ᄗ ᇷ ޗ #ᄬ Figure : 원근 투영 변환 zw 인 상황에서, 주어진 점 p = ( z )t 을 p = ( z )t 로 변환해주는 4행 4열의 원근투영 변환행렬 MP 를 Figure : 카메라의 위치와 방향 설정 9. 그림 에는 카메라의 위치와 방향을 설정해 주는 카메라 프레임이 도시되어 있다. 이 경우 OpenGL 시스템에서 사용하는 4행 4열 뷰잉변 환 행렬 MV 를 (,, ) (6, 6, ) () (3) (). 다음은 직교 투영 변환과 관련한 문제이다. 그 림 2에서와 같이 3차원 공간의 두 점 (,, ) 과 (6, 6, )에 의해 정의되는 직육면체의 내용 을 다른 두 점 (,, )과 (,, )에 의해 정 의되는 정육면체의 영역으로 매핑해주는 4행 4 열 아핀 변환 행렬 Mortho 를 (주의: 변 환 후 z축의 방향이 반대가 되도록 네 모서리를 마춰주어야 함) ᰚ #ᄬ ᬧ #ᄬ (3) (2) () (,, ) () (2) (-, -, -) Figure 2: 직교 투영 변환 - 26년 4월 22일(금) 오전 : (K 2) c 26 임인성
. 시험지 뒤에 첨부한 프로그램은 적절한 모델링 변환을 통하여 자동차를 세상 좌표계로 그려주 는 OpenGL 프로그램이다. 이 프로그램과 그 림 3을 보면서 답하라. (a) 이 프로그램은 그림 3에 주어진 자동차에 대한 트리 구조를 어떤한 방식으로 탐색을 하고 있는가? 자료 구조 시간에 배운 용어 를 사용할 것. (b) 프로그램 문맥상 3번 문장의 (A)에 들어갈 내용을 이 프로그램의 문법에 맞게 정확히 (c) 프로그램 문맥상 3번 문장의 (B), (C), (D), 그리고 (E)에 들어갈 내용을 이 프로그램의 문법에 맞게 정확히 (주의: glm 함수에서는 기본적으로 각도는 라디안을 사용하므로 이 프로그램에서 정의한 상수 TO RADIAN을 적절히 사용할 것) (d) 이 프로그램에서 43번 문장 수행 후 변수 ModelMatri CAR WHEEL에 저장되는 4행 4 열의 내용을 그림 3의 행렬 기호들을 사용 하여 표현하라. (e) draw wheel and nut() 함수가 4번 문장 에서 호출되어 수행이 되는 과정에서, 변 수 i가 4일 때 4 문장 수행 결과 변수 ModelMatri CAR NUT에 저장되는 행렬의 내용을 그림 3의 행렬 기호들을 사용하여 표현하라. (f) 이 프로그램의 35번 문장은 자동차의 운전 석에 배치한 카메라의 위치와 방향을 기술 해주는 프레임을 그려주는 역할을 한다 (,, 그리고 z축 각각이 u, v, 그리고 n축에 대 응함을 상기할 것). 해당 부분의 코드를 볼 때 이 자동차의 앞쪽 방향은 자신의 모델링 좌표계를 기준으로 어느 축 방향을 향하고 있을까? 양의 축 또는 음의 축 과 같 이 해당 축과 방향을 정확히 기술할 것. (g) 이 프로그램의 4번 문장과 46번 문장에 서 그려주는 번과 번 바퀴와는 달리 52 번 문장과 58번 문장에서 그려주는 2번과 3 번 바퀴에 대해서는 크기변환 (scale)이 수 행되는 이유는 무엇일까? 2. 다음 문제에 답하라. 필요할 경우 CC, EC, MC, NDC, WC, 그리고 WdC (Window Coordinate) 등의 OpenGL 좌표계 이름을 사용하라. (a) 2차원 공간에서 원점을 지나고 길이가 인 벡터 p 방향을 향하는 직선을 고려하자. 이 (5/7) 때 한 점 q가 주어졌을 때, 이 점과 이 직 선과의 최단 거리를 벡터의 내적 연산 및 벡터의 길이 연산자를 사용하여 표현하라. (참고: 내적 연산자 기호는, 그리고 벡터 의 길이 연산자는 사용할 것) (b) 3차원 공간에서 두 벡터 (, 2, 3)과 (4, 5, 6) 에 의해 정의되는 삼각형의 면적을 구하라. (c) 2차원 공간의 두 직선 3 + 2 + 5 = 과 6 + 4 + 5 = 의 교점에 대한 투영 공간 에서의 동차 좌표를 상수만 사용하여 기술 하라. (d) 투영 참조점이 무한대점 (point at infinit) 에 위치한 투영 변환의 이름은 무엇인가? (e) OpenGL의 뷰잉 파이프라인에서 항상 3차 원 공간의 [, ] [, ] [, ]의 영역만 고려하는 좌표계의 이름은 무엇인가? (f) OpenGL의 뷰잉 파이프라인에서 촬영한 필 름을 현상한 후 인화지에 확대/인화하는 과 정은 정확히 어느 좌표계에서 어느 좌표계 로 보내주는 과정에 해당하는가? (g) OpenGL의 뷰잉 파이프라인에서 카메라 의 위치와 방향을 설정 해주는 변환은 정 확히 어느 좌표계에서 어느 좌표계로 보내 주는 변환인가? (h) 다음은 OpenGL Core Profile의 간단한 verte shader의 예를 보여주고 있다. #version 33 uniform mat4 u Matri; uniform vec3 u color; laout (location = ) in vec4 a pos; out vec4 v color; void main(void) { v color = vec4(u color,.f); gl Position = u Matri * a pos; 정상적인 렌더링이 수행될 경우 MC와 가 장 관련이 높은 변수의 이름을 (i) (위 문제에 이어) 원근 나눗셈 (perspective division)과 가장 관련이 있는 변수의 이름 을 (j) (위 문제에 이어) u Matri는 어떤 좌표계 에서 어떤 좌표계까지의 기하변환 행렬을 저장하고 있을까? (k) 3차원 공간에서 원점을 지나고 벡터 ( )t 이 가리키는 방향에 의해 정의되는 - 26년 4월 22일(금) 오전 : (K 2) c 26 임인성
(6/7) Figure 3: 자동차의 계층적 표현 직선 둘레로 반시계 방향으로 θ 각도만큼 회전시켜주는 4행 4열 아핀 변환 행렬 R을 (l) 다음 행렬 MV 가 OpenGL 렌더링 시스템의 카메라의 위치와 방향 을 설정해주는 뷰잉 변환 행렬이라 하면, 이때 카메라는 정확히 어느 지점 에서 어느 방향 을 바라보고 있 는 상태를 의미할까? 2 2 MV = 2 2 (m) 3차원 공간에서의 이동 변환, 크기 변 환, 그리고 회전 변환에 대한 4행 4열 행렬 T (t, t, tz ), S(s, s, sz ), 그리고 R(θ, n, n, nz )를 고려하자. 위 행렬 MV 를 위의 기본 변환 행렬의 곱으로 표현하라. - 26년 4월 22일(금) 오전 : (K 2) c 26 임인성