서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/8) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의

Similar documents
서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/7) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당

0503중간고사.dvi

PowerPoint 프레젠테이션

서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (2/8) 다음과같이설정되어있는데, cam.pos[0] = 0.0, cam.pos[1] = 0.0, cam.pos[2] = 500.0; 이때의 cam.naxis[] 벡터의세원소값을기술하라. Figure

Microsoft Word - cg07-midterm.doc

0503중간고사.dvi

(Microsoft PowerPoint - CNVZNGWAIYSE.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Let 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

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

Łø·ŸÕ=¤ ¬ ÇX±xÒ¸ 06 - Èpº– 1

Microsoft PowerPoint - lecture2-opengl.ppt [호환 모드]

Open GL

Microsoft PowerPoint - 13prac.pptx

Line (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

K&R2 Reference Manual 번역본

; 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

Microsoft Word - cg09-midterm.doc

Microsoft PowerPoint - lecture11-ch4

1 경영학을 위한 수학 Final Exam 2015/12/12(토) 13:00-15:00 풀이과정을 모두 명시하시오. 정리를 사용할 경우 명시하시오. 1. (각 6점) 다음 적분을 구하시오 Z 1 4 Z 1 (x + 1) dx (a) 1 (x 1)4 dx 1 Solut

금오공대 컴퓨터공학전공 강의자료


<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

Microsoft Word - cg12-midterm-answer

슬라이드 1

컴퓨터그래픽스 소프트웨어

Microsoft PowerPoint - lecture11-ch4.ppt

Microsoft PowerPoint - lecture4-ch2.ppt

chap 5: Trees

서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/9) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거하

회원번호 대표자 공동자 KR000****1 권 * 영 KR000****1 박 * 순 KR000****1 박 * 애 이 * 홍 KR000****2 김 * 근 하 * 희 KR000****2 박 * 순 KR000****3 최 * 정 KR000****4 박 * 희 조 * 제

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - 06-Body Data Class.pptx

chapter2.hwp

스키 점프의 생체역학적 연구

<4D F736F F F696E74202D204347C3E2BCAEBCF6BEF D325FC4C4C7BBC5CDB1D7B7A1C7C8BDBA20B1E2BABBBFE4BCD22E >

게임 기획서 표준양식 연구보고서

Microsoft PowerPoint - ch02-1.ppt

Structure and Interpretation of Computer Programs: Assignment 3 Seung-Hoon Na October 4, George (아래 3개의 문제에 대한 구현이 모두 포함된 george.rkt파일을 제출하시오.

Microsoft PowerPoint - chap05-제어문.pptx

0503기말고사.dvi

ºñ»óÀå±â¾÷ ¿ì¸®»çÁÖÁ¦µµ °³¼±¹æ¾È.hwp

Microsoft Word - cg08-final-answer.doc

OpenGL 프로그래밍 가이드 : OpenGL 1.2 공식 학습 가이드 제3판

설계란 무엇인가?

KNK_C_05_Pointers_Arrays_structures_summary_v02

문제지 제시문 2 보이지 않는 영역에 대한 정보를 얻기 위하여 관측된 다른 정보를 분석하여 역으로 미 관측 영역 에 대한 정보를 얻을 수 있다. 가령 주어진 영역에 장애물이 있는 경우 한 끝 점에서 출발하여 다른 끝 점에 도달하는 최단 경로의 개수를 분석하여 장애물의

Microsoft Word - cg09-final-answer.doc

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에

PowerPoint 프레젠테이션

슬라이드 1

윤성우의 열혈 TCP/IP 소켓 프로그래밍

<B1B9BEEE412E687770>

서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/10) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - lecture11-ch5.ppt [호환 모드]

03_queue

01

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

04_오픈지엘API.key

Microsoft PowerPoint - LA_ch6_1 [호환 모드]

C 언어 프로그래밊 과제 풀이

BMP 파일 처리

LIDAR와 영상 Data Fusion에 의한 건물 자동추출

Microsoft PowerPoint - chap12-고급기능.pptx

(Microsoft PowerPoint - JXQEUPXIEBNZ.ppt [\310\243\310\257 \270\360\265\345])

Microsoft PowerPoint - lecture2-opengl.ppt

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

C++-¿Ïº®Çؼ³10Àå

<B4EBC7D0BCF6C7D02DBBEFB0A2C7D4BCF62E687770>

02장.배열과 클래스

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap01-C언어개요.pptx

제1장 군 제1절 소개와 예 제2절 이항연산 2.1 보기. 다음은 정수방정식 a + x = b를 푸는 과정이다. (1) 준식에 a를 더하여 ( a) + (a + x) = ( a) + b. (2) 결합법칙을 사용하면 (( a) + a) + x = ( a) + b. (3)


컴파일러

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

(Microsoft PowerPoint - FZBDPQDCSHAN.ppt [\310\243\310\257 \270\360\265\345])

수리영역 5. 서로다른두개의주사위를동시에던져서나온두눈의수의곱 이짝수일때, 나온두눈의수의합이 또는 일확률은? 5) 의전개식에서상수항이존재하도록하는모든자 연수 의값의합은? 7) 다음순서도에서인쇄되는 의값은? 6) 8. 어떤특산

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint 다변수 방정식과 함수(1).ppt

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

<4D F736F F D20BECBB1E220BDACBFEE20BAA4C5CD2C20C1C2C7A5B0E82C20C1C2C7A5BAAFC8AFC7E0B7C4>


(Microsoft PowerPoint - GEWZKYNMIJWQ.ppt [\310\243\310\257 \270\360\265\345])

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

0503기말고사.dvi

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산 (제 2 장. 복소수 기초)

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

슬라이드 1

벡터(0.6)-----.hwp

7.7) 정의역이 8.8) 연속확률변수 10.10) 원점을 좌표평면에서 인함수 의그래프가그림 과같다. 9.9 ) 함수 의그래프와함수 의 그래프가만나는점을 라할때, 옳은것만을 < 보기 > 에서있는대로고른것은? lim lim 의값은? < 보기 > ㄱ. ㄴ


Microsoft PowerPoint - lecture11-ch5.ppt [호환 모드]

Microsoft PowerPoint - [2009] 02.pptx

Transcription:

(/8) [CSE47: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의 변환을 위하여 사용 하는가? 답안지 공간이 부족할 경우, 답안지 뒷면에 기 술하고, 해당 답안지 칸에 그 사실을 명기할 것 (i) 투영 참조점이 무한대점 (point at infinit) 에 위치한 투영 변환의 이름은 무엇인가? 다음 단답식 문제에 답하라 (j) 다음과 같은 gluperspective(fov, asp, n, f) 함수에 대한 변환 행렬 Mpers 를 통하여 원 근 투영을 수행할 때 진행되는 원근 나눗 셈에서 분모로 사용되는 W 좌표 wc 값은 무엇인가? (a) 3차원 공간의 두 벡터 p = (p p pz )t 와 q = (q q qz )t 에 대하여 외적 (cross product) 연산을 통해 구한 벡터 r = p q = (r r rz )t 의 좌표 r 의 값을 기술하라 (b) 3차원 투영공간의 점 (5, 5,, )에 대응하는 아핀공간의 점의 좌표 (,, z)를 기술하라 (c) RGB 모델로 (3, 5, )로 표현되는 색 깔을 CMY 모델로 나타내면? cot( f ov ) asp (d) 차원 공간에서의 회전 변환에 해당하는 3 행 3열 아핀 변환 행렬 R(θ)을 기술하라 (e) 주어진 4행 4열 행렬이 3차원 공간에서의 아핀 변환에 해당하는지를 알 수 있는 방법 은 무엇인가? (f) 3차원 공간에서의 이동 변환, 크기 변 환, 그리고 회전 변환에 대한 4행 4 열 행렬 T (t, t, tz ), S(s, s, sz ), 그리고 R(θ, n, n, nz )를 고려하자 다음 행렬 M 의 역행렬 M 을 위의 기본 변환 행렬의 곱으로 표현하라 (반드시 위의 행렬 기호를 사용할 것) M = 5 5 fnf n (k) 위 문제에서 wc 값의 직관적인 의미를 설 명하라 3행 3열 행렬로 표현되는 차원 이동 변환 T (t, t ), 크기 변환 S(s, s ), 그리고 회전 변환 R(θ)를 고려하자 그림 (a)의 직사각형 영역의 내용을 (b)의 직사각형 영역으로 매핑해주는 3 행 3열의 기하 변환 행렬 M 을 (i) 위의 기본 변 환 행렬들의 곱으로 표현한 후, (ii) 최종 3행 3열 행렬의 내용을 구하라 cot( f ov ) f +n f n 5 - (g) OpenGL 렌더링 파이프라인에서 카메라 의 위치와 방향을 설정 해주는 과정에 해 당하는 기하 변환의 이름은 무엇인가? (h) OpenGL fied-function 파이프라인에서 glverte3f() 함수를 사용하여 설정한 꼭 지점에 곱해지는 첫 번째 행렬 스택의 탑에 - (a) 변환 전 6 (b) 변환 후 Figure : 차원 윈도우 매핑 - 4년 4월 5일(금) 오전 :3 (AS 44) c 4 임인성

3 아래의 코드는 그림 에 도시한 원점 주변의 번 비행기와 4사분면의 번 비행기를 그려주는 OpenGL 코드이다 Figure : 차원 기하 변환 draw airplane(); // airplane glpushmatri(); gltranslatef(5, -, ); glrotatef(9,,, ); glscalef(,, ); draw airplane(); // airplane glpopmatri(); (a) 이제 이 그림에서처럼 번 비행기를 직선 = + 에 대하여 반사시켜 사분면의 번 비행기와 같이 그려주려 한다 아래의 코드는 이를 위한 코드인데, (A)와 (B)에 들어갈 내용을 각각 한 번의 OpenGL API 함수 호출을 통하여 C/C++ 언어 문법에 맞게 기술하라 glpushmatri(); gltranslatef(-,, ); (A) glscalef(-,, ); (B) gltranslatef(5, -, ); glrotatef(9,,, ); glscalef(,, ); draw airplane(); // airplane glpopmatri(); (b) 3행 3열 행렬로 표현되는 차원 이동 변 환 T (t, t ), 크기 변환 S(s, s ), 그리고 회 (/8) 전 변환 R(θ)를 고려하자 R(θ)S(, ) = S(, )R(α) 식을 만족시켜주는 α 값은 무 엇인가? (c) S(, )T (t, t ) = T (β, γ)s(, ) 식을 만족시켜주는 β와 γ 값은 무엇인가? (d) R(θ)T (t, t ) = T (δ, )R(θ) 식을 만족시켜 주는 δ와 값은 무엇인가? (e) 이제 번 비행기를 그리는 작업은 아래와 같은 방식으로도 구현할 수 있다 이때 (C) 에 들어갈 내용을 한 번의 OpenGL API 함수 호출을 통하여 C/C++ 언어 문법에 맞게 기술하라 glpushmatri(); gltranslatef(-,, ); glrotatef(-9,,, ); (C) gltranslatef(5, -, ); glrotatef(9,,, ); glscalef(,, ); draw airplane(); // airplane glpopmatri(); (f) 마찬가지로 아래와 같은 방식으로 번 비행기를 그리려 한다 이때 공란으로 되어있는 각 OpenGL API 함수의 인자 다섯 개를 순서대로 기술하라 (힌트: 번 문제의 답을 잘 이용할 것) glpushmatri(); gltranslatef(,, ); glrotatef(,,, ); glscalef(,, ); draw airplane(); // airplane glpopmatri(); 4 다음은 프레임간의 변환에 관한 문제이다 (a) 그림 3의 A 소는 점 (4, 4, )을 원점으로 하는 자신의 프레임을 기준으로 세상 좌표 계에 존재하고 있는데, 이 프레임의 각 축 의 방향이 축 옆에 기술되어 있다 이때 이 프레임을 (,, -) 방향과 (,, ) 방향 이 각각 세상 좌표계의 w 축과 w 방향과 일치하는 방식으로 세상 좌표계와 일치시 켜주려한다 이때 필요한 4행 4열 행렬 M 의 내용을 기술하라 (b) 한편 B 소는 점 (,, )을 중심으로 하는 프레임을 기준으로 세상 좌표계에 존재하 고 있는데, A 소의 각 꼭지점들을 B 소의 - 4년 4월 5일(금) 오전 :3 (AS 44) c 4 임인성

w (4, 4, -) (,, ) (,, -) p COP: (,, ) (-,, ) p' B (,, -) A (,, ) 9 z PP: = 9 (,, ) zw (3/8) (a) 문제 (a) 그림 w (, -, ) p Figure 3: 프레임간의 변환 대응되는 점으로 매핑해주는 4행 4열 행렬 M 를 네 개의 기본 변환 행렬의 곱으로 표 현하라 (반드시 네 개의 4행 4열 행렬의 내 용을 곱해지는 순서대로 기술할 것) p' 5 다음은 원근 투영 변환에 관한 문제이다 (a) 그림 4(a)에서와 같이 COP(Center of Projecton)가 (,, )이고 PP(Projection Plane)이 = 9인 상황에서, 주어진 점 p = ( z )t 을 p = ( z )t 로 변환해 주는 4행 4열의 원근 투영 변환 행렬 M 을 구하라 (반드시 유도과정이 있어야 함) (b) 그림 4(b)는 임의의 점 p를 이 점과 원점 을 지나는 직선과 세 점 (,, ), (,, ), 그리고 (,, )을 지나는 평면과의 교점 p 로 투영해주는 모습을 도시하고 있다 이때 이에 대한 원근 투영 변환 행렬 M 를 구하 라 (반드시 유도과정이 있어야 함) 6 다음은 간단한 모델링 변환에 관한 문제이다 (a) 아래의 코드는 그림 5(a)에 도시한 그림을 그려주는 OpenGL 프로그램의 일부이다 glmatrimode(gl MODELVIEW); glloadidentit(); glulookat(, 5,,,,,,, ); draw ais(); draw floor(); draw cow(); // Line (a) for (angle = ; angle < 36; angle += 45) { z (b) 문제 (b) 그림 Figure 4: 원근 투영 변환 glpushmatri(); // Line (c) gltranslatef(4,, ); draw cow(); // Line (b) glpopmatri(); 여기서 Line (a)의 함수는 원점에 배치되 어 있는 소를 그려주고, Line (b)의 함수는 원점을 둘레로 반경 4인 원을 따라 회전하 고 있는 소를 그려주는 역할을 하고 있는데, 이 코드에는 회전에 필요한 OpenGL API 함수 호출 문장이 결여되어 있다 위 프로그 램이 제대로 작동하기 위하여 어느 지점에 어떤 문장이 필요한지, 그 내용을 OpenGL 및 C/C++ 언어 문법에 맞게 정확히 기술 하라 답은 어떤 문장 직전 (또는 직후)에 다음 OpenGL 문장이 필요함 과 같이 기술 하되, 두 개 이상의 OpenGL 문장이 필요할 수 있음 (b) 다음 프로그램에서 그림 5(b)와 같은 결과를 얻기 위하여 필요한 회전에 필요한 문장을 위 문제에서와 동일한 방식으로 답하라 - 4년 4월 5일(금) 오전 :3 (AS 44) c 4 임인성

(4/8) z (a) 문제 (a) 그림 Figure 6: glulookat(*) 함수를 통한 뷰잉 변환 8 다음은 뷰잉 변환에 관한 문제이다 z (b) 문제 (b) 그림 Figure 5: 간단한 모델링 변환 for (int i = ; i < 5; i++) { glpushmatri(); // Line (d) gltranslatef(*i-4,, ); draw cow(); // Line (e) glpopmatri(); 7 다음은 glulookat(*) 함수를 통한 뷰잉 변환에 관한 문제이다 그림 6의 뷰잉 변환 계산 과정과 그림 7의 함수 구현 코드를 보면서 답하라 (a) 이 코드에서 이 그림의 VRP와 가장 밀접한 관련이 있는 변수(들)을 정확히 기술하라 (b) 이 코드에서 이 그림의 v와 가장 밀접한 관 련이 있는 변수(들)을 정확히 기술하라 (c) 문맥 상 이 코드의 (A), (B), 그리고 (C) 부 분에 들어갈 내용을 C/C++ 언어 문법에 맞게 정확히 기술하라 (d) 이 코드에는 분명히 잘못된 부분이 있다 그 부분을 명시한 후 올바르게 바로 잡아라 (a) 한 점 e와 서로 수직이고 길이가 인 세 개의 벡터 u (카메라 기준 오른쪽 방향), v (카메라 기준 위쪽 방향), n (카메라에서 세상을 바라보는 방향의 정반대 방향)으로 정의되는 카메라 프레임을 생각하자 지금 점 e가 원점에, 그리고 u, v, n 벡터가 각각 세상 좌표계의 w, w, zw 축 방향을 향하도록 카메라 프레임이 초기화되어 있다 이 상태서 이 카메라 프레임을 w 축 둘레로 9도만큼 회전시킨 후, w 축 방향으로 -만큼 이동을 시켰다고 하자 이때의 뷰잉 변환을 아래의 코드처럼 구현하려 할때, (A) 부분에 들어갈 내용을 C/C++ 언어 문법에 맞게 OpenGL API 함수 호출을 통하여 구현하라 GLfloat matri[6]; glmatrimode(gl MODELVIEW); glloadidentit(); (A) glgetfloatv(gl MODELVIEW MATRIX, matri); (b) 여기서 glgetfloatv(*); 문장은 이 문장 수행 당시의 현재 행렬 스택의 탑의 내용 을 배열 matri[6]으로 추출해주는 역할 을 한다 이때 이 배열에 저장되는 6개의 원소 값을 순서대로 기술하라 (OpenGL 시 스템에서 차원 배열이 저장되는 순서를 상 기할 것) 9 지금 다음처럼 카메라 변수 cam을 정의한 후, tpedef struct cam { float pos[3], uais[3], vais[3], - 4년 4월 5일(금) 오전 :3 (AS 44) c 4 임인성

서강대학교공과대학컴퓨터공학과 CSE47 기초컴퓨터그래픽스중간고사 (5/8) void glulookat(gldouble ee, GLdouble ee, GLdouble eez, GLdouble center, GLdouble center, GLdouble centerz, GLdouble up, GLdouble up, GLdouble upz) { GLdouble m[6]; GLdouble [3], [3], z[3]; GLdouble mag; z[] = ee - center; z[] = ee - center; z[] = eez - centerz; mag = sqrt(z[]*z[] + z[]*z[] + z[]*z[]); if (mag) { z[] /= mag; z[] /= mag; z[] /= mag; [] = up; [] = up; [] = upz; [] = []*z[] - []*z[]; [] = -[]*z[] + []*z[]; [] = []*z[] - []*z[]; [] = (A) ; [] = (B) ; [] = (C) ; mag = sqrt([]*[] + []*[] + []*[]); if (mag) { [] /= mag; [] /= mag; [] /= mag; mag = sqrt([]*[] + []*[] + []*[]); if (mag) { [] /= mag; [] /= mag; [] /= mag; #define M(row,col) m[col*4+row] M(,) = []; M(,) = []; M(,) = []; M(,3) = ; M(,) = []; M(,) = []; M(,) = []; M(,3) = ; M(,) = z[]; M(,) = z[]; M(,) = z[]; M(,3) = ; M(3,) = ; M(3,) = ; M(3,) = ; M(3,3) = ; #undef M glmultmatrid(m); gltranslated(ee, ee, eez); Figure 7: glulookat(*) 함수의구현 nais[3]; GLfloat mat[6]; GLdouble fov, aspect, near c, far c; Cam; Cam cam; 디스플레이컬백함수에서다음과같이물체를그리려한다 ( 여기서 sfactor 는 float 타입의전역변수임 ) void displa (void) { glclear(gl COLOR BUFFER BIT); glmatrimode(gl MODELVIEW); glloadidentit(); // Line (a) glmultmatrif(cammat); gltranslatef(-campos[], -campos[], -campos[]); // Line (b) glpushmatri(); glscalef(sfactor, sfactor, sfactor); // Line (c) draw teapot(); glpopmatri(); glflush(); (a) 보편적인관점에서, Line (a) 와 Line (b) 지점에서 glverte*(*) 함수로꼭지점의좌표를기술하면이꼭지점은각각눈좌표계, 모델링좌표계, 그리고세상좌표계중어느좌표계에서의의미를가질까? (b) 다음과같은함수를사용하여세상좌표계의좌표축을그려주려한다 void draw aes(void) { gllinewidth(); glbegin(gl LINES); glcolor3f(,, ); // 축 glverte3f(,, ); glverte3f(5,, ); glend(); gllinewidth(); 이함수를 Line (a), Line (b), 그리고 Line (c) 중어느시점에서호출을해야 - 4 년 4 월 5 일 ( 금 ) 오전 :3 (AS 44) - c 4 서강대학교공과대학컴퓨터공학과임인성

할까? (c) 그림 8은 이 프로그램의 초기 렌더링 결과 를 보여주고 있다 (여기서 세상 좌표계의 축과 축이 각각 오른쪽과 위쪽 방향으로 그려져 있고, z축은 화면 앞으로 튀어 나오고 있음) 초기에 카메라의 위치는 다음과 같이 설정되어 있는데, campos[] =, campos[] =, campos[] = 5; (6/8) set rotate mat(cammat); glutpostredispla(); break; (e) 위 스페셜 컬백 함수를 사용할 경우, 아래 화살표 키를 누를 때마다 화면에서 물주전 자가 어떤 식으로 움직일지를 적절한 수치 를 사용하여 정확히 기술하라 이때의 camuais[] 벡터의 세 원소 값을 그림 9는 아래에 주어진 디스플레이 컬백 함수를 통하여 세상 좌표계 (WC)에서 동일한 기술하라 소 모델을 사용하여 렌더링한 모습을 도시하고 있다 w WC 㞚㰖 zw w Figure 8: 물주전자 그리기 㠊 (d) 다음은 스페셜 컬백 함수의 일 부이다 이 코드에서 문맥상 set rotate mat(cammat); 문장은 cammat[] 배열에 어떤 값들을 어떻게 넣어주는 역할을 할지 정확히 기술하라 case GLUT KEY DOWN: { float c, s, t, t; c = cos(3459*45/8); s = sin(3459*45/8); t = c*camnais[] - s*camnais[]; t = s*camnais[] + c*camnais[]; camnais[] = t, camnais[] = t; t = c*camuais[] - s*camuais[]; t = s*camuais[] + c*camuais[]; camuais[] = t, camuais[] = t; campos[] = 5*camnais[]; campos[] = 5*camnais[]; campos[] = 5*camnais[]; Figure 9: 간단한 계층적 모델링 void render(void) { glclear(gl COLOR BUFFER BIT); glmatrimode(gl MODELVIEW); draw floor(533, 7, 75); draw aes(3, 5); // WC 좌표축 draw aes(, 5); draw cow(43, 67, 333); // 소 glpushmatri(); (A) glscalef(,, ); draw aes(, 5); glpushmatri(); gltranslatef(-, 88, ); draw cow(,, ); - 4년 4월 5일(금) 오전 :3 (AS 44) c 4 임인성

glpopmatri(); glscalef(5, 5, 5); draw cow(94, 67, 9); glpopmatri(); glutswapbuffers(); (a) 이 프로그램에서 세 개의 draw cow(*); 문 장들은 각각 소, 송아지, 그리고 어미소를 그려주고 있다 여기서 송아지를 그려주는 문장은 어떤 것인지 해당 함수의 세 개의 인자를 통하여 답하라 (b) 프로그램 문맥상 어미소는 원점 주변의 소 의 몇 배 크기를 가질까? (c) 지금 타이머 컬백 함수에 의해 변수 angle 의 값이 씩 증가하면서 (과 359 사이에서 순환) 위의 디스플레이 컬백 함수가 호출 되고 있다 어미소와 송아지가 세상 좌표계 의 w 축 둘레로 반경 4인 원을 따라 같이 회전을 하게 하게 하기 위하여 (A) 지점에 필요한 내용을 C/C++ 언어 문법에 맞게 OpenGL API 함수 호출을 통하여 구현하 라 (어미소와 송아지의 얼굴이 진행 방향을 가리킴) (d) 위 코드에서 소, 어미소, 송아지 등 각 물 체를 그려주는 문장이 수행되는 시점에는 각 물체 자신만의 좌표계가 설정되어 있 다고 할 수 있다 이때 송아지를 그려주는 문장이 수행되는 시점에서 한 꼭지점에 어 떤 기하 변환을 가하면 어미소를 그려주 는 문장이 수행되는 시점의 좌표계로 변환 할 수 있을까? T (t, t, tz ), R(α, r, r, rz ), S(s, s, sz ) 행렬과 그것들의 역행렬을 적 절히 사용하여 그 기하 변환을 합성하라 (7/8) 느 영역인지 (자신이 붙인 이름을 사용하 여) 밝히고, (ii) 어떠한 사용자 인터액션 을 통해 메뉴를 화면에 도시하는지, 그리고 (iii) 각 메뉴 요소 선택을 통하여 어떤 일을 할 수 있는지 명확히 기술하라 (c) 어떤 특정 영역은 왼쪽 마우스 버튼 클릭에 대하여 반응을 한다 어떤 영역인지 (자신 이 붙인 이름을 사용하여) 기술하라 (d) 그 영역에서 왼쪽 마우스 버튼을 눌러다가 뗄 때 어떤 영역의 내용이 어떻게 바뀌는 지 정확히 기술하라 그 어떤 작용에 대하여 필요하다면 마우스 커서의 위치를 정확히 기술할 것 (e) 만약 9번과 번 문장 사이에 다음 문장을 삽입하고, glutsetwindow(subwindow); 번 문장을 다음 두 문장으로 대치 할 경우에 대하여, glutsetwindow(subwindow); glclearcolor(,,, ); 바로 위 문제에 대하여 답하라 <수고 많았습니다!> 그림 에 주어진 GLUT API 함수를 통한 윈도 우 프로그래밍 코드를 보고 답하라 (a) 이 프로그램을 처음 수행시키면 가로-세로 픽셀 크기의 윈도우가 화면에 도시된 다 이 윈도우 안에는 두 개의 사각형이 그 려지는데, 전체 윈도우 안에서의 이 두 사 각형의 정확한 크기와 위치를 그리고 이 두 사각형으로 인하여 생성되는 세 영역의 초 기 색깔을 명확히 기술하라 (이 세 영역에 대하여 적절히 (A), (B), 그리고 (C)로 이름 을 붙이고, 이후 문제에서는 이 영역 이름을 사용하여 답할것) (b) 이 프로그램에서는 특정 윈도우 영역에서 메뉴를 사용할 수 있는데, (i) 그 영역이 어 - 4년 4월 5일(금) 오전 :3 (AS 44) c 4 임인성

서강대학교공과대학컴퓨터공학과 CSE47 기초컴퓨터그래픽스중간고사 (8/8) : int MainWindow, SubWindow, SubWindow; 3: void mouse(int button, int state, int, int ) { 4: if ((button == GLUT LEFT BUTTON) && (state == GLUT DOWN)) { 5: if ( <= ) { 6: glclearcolor(,,, ); 7: glutpostredispla(); 8: 9: else { : glclearcolor(,,, ); : glutpostredispla(); : 3: 4: else if ((button == GLUT LEFT BUTTON) && (state == GLUT UP)) { 5: if ( <= ) { 6: glclearcolor(,,, ); 7: glutpostredispla(); 8: 9: else { : glclearcolor(,,, ); : glutpostredispla(); : 3: 4: 5: void displa(void) { glclear(gl COLOR BUFFER BIT); glflush(); 6: void hello(int value) { 7: if (value) { glclearcolor(,,, ); glutpostredispla(); 8: else { glclearcolor(,,, ); glutpostredispla(); 9: 3: void main (int argc, char **argv) { 3: glutinit(&argc, argv); glutinitdisplamode(glut RGBA); glutinitwindowsize(,); 3: MainWindow = glutcreatewindow("4 CSE37 Midterm Eam"); 33: glutcreatemenu(hello); 34: glutaddmenuentr("bo", ); glutaddmenuentr("girl", ); 35: glutattachmenu(glut RIGHT BUTTON); 36: glutdisplafunc(displa); 37: glclearcolor(,,, ); 38: SubWindow = glutcreatesubwindow(mainwindow,,, 4, ); 39: glutdisplafunc(displa); 4: glclearcolor(,,, ); 4: SubWindow = glutcreatesubwindow(mainwindow, 6, 5,, 4); 4: glutdisplafunc(displa); 43: glutmousefunc(mouse); 44: glclearcolor(,,, ); 45: glutmainloop(); 46: Figure : GLUT 함수를통한윈도우프로그래밍예 - 4 년 4 월 5 일 ( 금 ) 오전 :3 (AS 44) - c 4 서강대학교공과대학컴퓨터공학과임인성