0503중간고사.dvi

Size: px
Start display at page:

Download "0503중간고사.dvi"

Transcription

1 서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 1/9 [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 담당교수: 임 인 성 답은 반드시 답안지에 기술할 것. 공간이 부족할 경우 반드시 답안지 몇 쪽의 뒤에 있다고 명기한 후 기술할 것. 그 외의 경우의 답안지 뒤쪽이나 연습지 에 기술한 내용은 답안으로 인정 안함. 1. 2차원 기하 변환 중 이동 변환 T tx, ty, 크기 변 환 Ssx, sy, 그리고 회전 변환 Rθ에 해당하는 3행 3열 행렬들을 고려하자. a 임의의 점 x, y를 y, x로 변환해주는 3행 3열의 기하 변환 행렬 M1 을 위의 기 본 변환 행렬들의 합성을 통하여 표현하라. 최종 행렬의 내용도 정확히 기술할 것. 2. 그림 2에서 오른쪽에 있는 비행기는 세상 좌 표계 공간에서 8자 모양의 궤적을 따라 회전 을 하고 있다 아래의 프로그램에서 Line B 의 draw airplane 함수를 호출할 때 그려짐. 또한 원점 근처에 있는 비행기는 이 비행기가 자신의 모델링 좌표계 있는 즉 아래의 프로그 램에서 아무런 모델링 변환 없이 Line A의 draw airplane 함수를 호출할 때 그려지는 모습에 해당한다. 참고로 angle2와 phase 변수 는 정수 타입의 변수로 0으로 초기화되어 있고, 각 원의 반지름은 0.2*win height임. b 임의의 점 x, y를 y, x로 변환해주는 3 행 3열의 기하 변환 행렬 M2 를 위의 기본 변환 행렬들의 합성을 통하여 표현하라. 최 종 행렬의 내용도 정확히 기술할 것. c T tx, ty S1, 1 = S1, 1T α, β라 할 때, α와 β의 값은? d RθS1, 1 = S1, 1Rγ라 할 때, γ의 값은? e 그림 1a의 직사각형 영역의 내용을 b의 직사각형 영역으로 매핑해주는 3행 3열의 기하 변환 행렬 M3 를 위의 기본 변환 행 렬들을 사용하여 합성하라. 최종 행렬 값도 정확히 기술할 것. y a 변환 전 x 10 x' y' b 변환 후 Figure 1: 2차원 윈도우 매핑 Figure 2: 비행기 애니메이션 #define TO RAD /180.0 void timerint value { gluttimerfunc15, timer, 2; angle2 = angle2 + 1 % 180; if angle2 == 0 phase = phase + 1 % 4; trans2 x = 0.2*win height *cosdouble TO RAD*angle ; trans2 y = 0.2*win height *sindouble TO RAD*angle2; glutpostredisplay; void display void { glcleargl COLOR BUFFER BIT; 년 4월 26일목 오후 7:00 AS 414 c 2012 서강대학교 공과대학 컴퓨터공학과 임인성

2 서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 yw draw axes; draw path; draw airplane; // Line A glpushmatrix; switchphase { case 1: gltranslatef-0.4*win height, 0.0, 0.0; glscalef1.0, -1.0, 1.0; break; case 2: glscalef B, 1.0; break; case 3: gltranslatef0.2*win height, 0.0, 0.0; glscalef-1.0, 1.0, 1.0; gltranslatef-0.2*win height, 0.0, 0.0; glscalef1.0, -1.0, 1.0; gltranslateftrans2 x, trans2 y, 0.0; glrotatef A ; draw airplane; // Line B glpopmatrix; glutswapbuffers; a 프로그램 문맥 상 이 그림이 그려진 순간의 변수 phase의 값은 얼마일까? b 프로그램 문맥 상 A에 들어갈 내용을 C 언어 문법에 맞게 정확히 기술하라. WC 4. 그림 4에는 점 q = qx qy qz t 을 중심으로, 각각 세 개의 벡터 u = ux uy uz t, v = vx vy vz t, n = nx ny nz t 와 u0 = u0x u0y u0z t, v 0 = vx0 vy0 vz0 t, n0 = n0x n0y n0z t 에 의해 정의가 되는 두 개의 프레임이 도시되어 있다 여기서 각 프레임의 세 벡터는 서로 수직인 단위 벡터 들임. a 지금 Frame 1을 Frame 2로 맞추어 주는 아 핀변환에 해당하는 4행 4열 행렬 M 을 이동 변환과 회전 변환을 적절히 합성하여 구하 려 한다. 이때 회전 변환을 두 번 적용할 5 xw 5 ᄗ ᇷ ޗ #ᄬ zw ᰚ #ᄬ ᬧ #ᄬ Figure 3: 간단한 뷰잉 변환 경우의 M 을 4행 4열 기하 변환 행렬들의 곱으로 표현하라. 최종 변환 행렬이 아니라 곱해지는 각 요소 행렬들의 16개 원소를 정 확히 기술할 것. b 위의 문제에서 회전 변환을 한 번 적용할 경우의 M 을 4행 4열 행렬의 곱으로 표현 하라. 마찬가지로 곱해지는 각 행렬의 16 개 원소를 정확히 기술하고, 특히 회전 변 환 행렬의 내용은 여섯 개의 벡터 u, v, n, u0, v 0, n0 들의 곱 을 사용하여 간결하게 표현하라 각 벡터는 3행 1열의 벡터임을 명심하고, 예를 들어, u v t 와 같은 방식의 곱셈 사용. y c 프로그램 문맥 상 B에 들어갈 두 개의 값 을 기술하라. 3. 그림 3에는 카메라의 위치와 방향을 설정해주 는 프레임이 도시되어 있다. 이 경우에 해당 하는 뷰잉변환을 설정해주는 OpenGL 코드를 gltranslatefx, y, z, glscalefx, y, z, 그리고 glrotatefa, x, y, z 등의 함수만을 사용하여 가급적 적은 회수의 함수 호출을 통 하여 구현하라. 2/9 M p u' Frame 2 n' n z p' v q v' x u Frame 1 Figure 4: 프레임 변환 문제 5. 다음은 어떤 프로그램의 일부이다. typedef struct cam { float pos[3]; float uaxis[3], vaxis[3], naxis[3]; GLfloat mat[16]; int move; GLdouble fovy, aspect, near c, far c; Cam; Cam cam; 년 4월 26일목 오후 7:00 AS 414 c 2012 서강대학교 공과대학 컴퓨터공학과 임인성

3 서강대학교 공과대학 컴퓨터공학과 #define Mrow,col m[col*4+row] void set rotate matglfloat *m { M0,0 = ; M0,1 = ; M0,2 = ; M1,0 = ; M1,1 = ; M1,2 = ; M2,0 = ; M2,1 = ; M2,2 = ; M0,3 = M1,3 = M2,3 = 0.0; M3,0 = M3,1 = M3,2 = 0.0; M3,3 = 1.0; void rendervoid { glcleargl COLOR BUFFER BIT; glmatrixmodegl MODELVIEW; glloadidentity; glmultmatrixfcam.mat; gltranslatef,, ; draw axis; draw world; // Modeling Transform here. glutswapbuffers; #define CAM TSPEED 0.05 void renew cam pos xint del { cam.pos[0] += CAM TSPEED*del* A ; cam.pos[1] += CAM TSPEED*del* B ; cam.pos[2] += CAM TSPEED*del* C ; void renew cam pos yint del { void renew cam pos zint del { #define TO RADIAN void get rotation matfloat x, float y, float z, float angle, float m[3][3] {... void renew cam ori xint angle { float m[3][3], tmpx, tmpy, tmpz; get rotation matcam.uaxis[0], cam.uaxis[1], cam.uaxis[2], CAM RSPEED*angle, m; cam.vaxis[0] = m[0][0]*tmpx=cam.vaxis[0] + m[0][1]*tmpy=cam.vaxis[1] + m[0][2]*tmpz=cam.vaxis[2]; cam.vaxis[1] = m[1][0]*tmpx + m[1][1]*tmpy + m[1][2]*tmpz; cam.vaxis[2] = m[2][0]*tmpx + m[2][1]*tmpy + m[2][2]*tmpz; cam.naxis[0] = ; cam.naxis[1] = ; cam.naxis[2] = ; set rotate matcam.mat; void renew cam ori yint angle { CSE4170 기초 컴퓨터 그래픽스 중간고사 3/9 void renew cam ori zint angle { a 프로그램 문맥 상 투영 변환과 직접적인 관 련이 있는 변수들을 모두 나열하라. b set rotate mat*은 뷰잉 변환과 관련된 행렬에 대한 함수이다. 프로그램 문맥 상 M0,0 = ;, M1,0 = ;, M2,0 = ; 문장에는 어떤 내용이 들어가야 할지 C언어 문법에 맞게 기술하라. c 프로그램 문맥 상 get rotation mat* 함 수는 정확히 어떤 수학적인 내용을 어떤 인 자를 통하여 받아들여, 어떤 수학적인 내용 을 어떤 인자로 통하여 돌려주는지를 정확 히 기술하라. d 디스플레이 컬백 함수인 render 함수 내 부에서 gltranslatef* 함수 호출 시 필 요한 세 인자를 C언어 문법에 맞게 기술하 라. e renew cam pos x* 함수는 점 cam.pos와 세 벡터 cam.uaxis, cam.vaxis, cam.naxis 로 정의된 카메라 프레임을 cam.uaxis 방 향을 따라 del 값이 양수일 때 오른쪽으로, 음수일 때는 왼쪽으로 이동시켜주는 작업 을 한다. 이러한 목적을 달성하도록 A, B, 그리고 C에 들어갈 내용을 C언어 문 법에 맞게 정확히 기술하라. f renew cam ori x* 함수도 카메라에 프 레임에 대하여 어떤 조작을 가하고 있는데 그것이 무엇인지 정확히 기술하라. 6. 다음은 void gluperspectivefovy, asp, n, f; 함수에 관한 문제이다. a 그림 5는 이 함수가 정의하는 뷰 볼륨을 도 시하고 있다. 눈 좌표계 EC 상에서 투 영 참조점이 원점인 상황에서 임의의 점 xe ye ze t 인 점을 ze = n 평면, 즉 ze 축 에 수직이고 음의 방향으로 n만큼 떨어진 평면에 원근 투영한 점을 x e ye nt 이라 할 때, x e 와 ye 값을 기술하라. b 위 함수에 의해 정의되는 뷰 볼륨의 앞면에 해당하는 직사각형 영역 0번 점과 1번 점을 포함하는 직사각형의 네 개의 모서리 중 0번 점과 1번 점의 좌표를 기술하라. 당연히 ze 좌표는 n이며, 위 함수의 인자 f ovy, asp, n, f 등과 tan, cot 등의 삼각 함 수를 사용하여 표현하라 년 4월 26일목 오후 7:00 AS 414 c 2012 서강대학교 공과대학 컴퓨터공학과 임인성

4 서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 4/9 ye w ze 옆모습 3 2 ye h 0 -f asp = w/h 1 ze xe -n fovy Figure 5: 투영 변환 c 뷰 볼륨 안에 존재하는 점을 ze = n 평면 에 투영한 점 x e ye nt 은 바로 위 문제의 직사각형 영역 안에 들어오게 되는데, 이 영 역을 x와 y축 각각에 대해 -1에서 1까지의 구간이 정의하는 정사각형 영역으로 매핑 을 해주면, 정규 디바이스 좌표계 NDC 상에서의 좌표를 구할 수 있게 된다. 위 두 문제의 결과를 바탕으로 하여, EC 상의 점 xe ye ze t 을 위 함수에 의해 NDC로 변환 해준 점의 x, y 좌표 xnd ynd t 를 xe, ye, ze, 그리고 위 함수의 인자 f ovy, asp, n, f 값과 tan, cot 등의 삼각 함수를 사용하여 표현하 라. 간단히 유도 과정을 기술할 것. int iii = 0; void displayvoid { glcleargl COLOR BUFFER BIT; glmatrixmodegl MODELVIEW; glpushmatrix; glrotatefiii*90.0, 0.0, 0.0, 1.0; glbegingl TRIANGLES; glvertex2f1.0, 0.0; glvertex2f1.0, 1.0; glvertex2f0.0, 1.0; glend; glpopmatrix; glflush; d znd 의 경우 다음과 같이 됨을 보일 수 있는 데, void mousepressint button, int state, int x, int y { if button == GLUT RIGHT BUTTON && state == GLUT DOWN && glutgetmodifiers == GLUT ACTIVE SHIFT iii = iii+1%4; glutpostredisplay; znd = +n ff n ze f2nf n ze 지금까지 구한 모든 값을 사용하여 위 함수 가 계산을 해주는 4행 4열 투영 변환 행렬 MP 를 정확히 기술하라. e 이제 위의 행렬 MP 에 xe ye ze 1t 을 곱하 면 절단 좌표계 CC 상의 점 xc yc zc wc t 로 변환이 되는데 이때 wc 값은 기하적으로 어떤 정보를 제공할까? f 투영 공간 projective space인 CC에서 다 시 유클리드 공간인 NDC로 돌아오기 위해 수학적으로 xc, yc, zc 값을 wc 로 나누어주 는데, 이때 기하적으로 어떤 현상이 발생하 는가? 7. 아래 주어진 2차원 기하 변환에 관한 프로그램 을 보고 답하라. void reshapeint width, int height { glviewport0, 0, width, height; glmatrixmodegl PROJECTION; glloadidentity; glmatrixmodegl MODELVIEW; glloadidentity; glutpostredisplay; void OpenGLInitandRegisterCallbackvoid { glclearcolor1.0, 1.0, 1.0, 1.0; glpolygonmodegl FRONT AND BACK, GL FILL; glcolor3f1.0, 0.0, 0.0; glutdisplayfuncdisplay; glutreshapefuncreshape; 년 4월 26일목 오후 7:00 AS 414 c 2012 서강대학교 공과대학 컴퓨터공학과 임인성

5 서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 5/9 Figure 6: OpenGL을 사용한 2차원 기하 변환 glutmousefuncmousepress; void main int argc, char **argv { glutinit&argc, argv; glutinitdisplaymodeglut RGBA; glutinitwindowsize500, 500; glutcreatewindow"midterm Problem"; OpenGLInitandRegisterCallback; glutmainloop; a 이 프로그램은 사용자가 어떤 행동 action 을 취할 때마다, 네 번을 주기로 화면의 내 용이 반복된다. 과연 어떤 행동인지 정확히 기술하라. b 사용자가 위 문제의 행동을 취할 때 화면의 그림이 어떤 식으로 순환하는지, 그림 6과 같은 방식으로 그려라. 가장 처음 상태를 가 장 왼쪽에 도시하고, 도형의 모양과 위치를 가급적 정확히 표시하며, 어떤 부분이 적색 영역인지 분명히 밝힐 것. c 원래의 프로그램 상태에서 dispaly 함 수의 glrotatef*; 문장 바로 다음에 다 음 문장을 삽입하면 화면의 내용이 어떻게 반복될지, 그림 6과 같은 방식으로 그려라. gltranslatef-1.0, -1.0, 0.0; d 바로 위 문제의 프로그램 상태에서, 즉 이 동 변환 관련 문장이 삽입된 상태에서 reshape 함수의 glutpostredispaly; 문장 바로 직전에 아래와 같은 문장을 삽입 할 경우 화면의 내용이 어떻게 반복될지, 그림 6과 같은 방식으로 그려라. glortho0.0, 1.0, 0.0, 1.0, -1.0, 1.0; 8. 다음 단답식 문제에 답하라. 필요할 경우 OC Object Coordinate, CC, EC, MC, NDC, WC, WdC Window Coordinate 등의 OpenGL 좌표계 이름을 적절히 사용하라. a 3차원 투영공간의 점 6.0, 6.0, 9.0, 3.0에 해당하는 아핀공간의 점의 좌표 x, y, z를 기술하라. b RGB 모델로 값이 0.3, 0.5, 1.0인 색깔을 CMY 모델로 나타내면? c 3차원 아핀변환을 나타내는 4행 4열 행렬 M = mij, i, j = 1, 2, 3, 4이 변환 후에 도 물체의 크기와 모양을 보존해주기 위하 여 M 의 어느 부분이 어떤 성질을 가져야 하는지 행렬이나 벡터의 성질을 사용하여 기술하라. d 다음 행렬의 역행렬 M 1 의 내용을 기술하 라 M = e 어떤 4행 4열 행렬 M = mij, i, j = 1, 2, 3, 4이 아핀 변환 행렬이 되기위한 조 건을 mij 의 값을 통하여 기술하라. f 3차원 공간의 [ 1, 1] [ 1, 1] [ 1, 1]의 영 역만 고려하는 좌표계는 어느 좌표계일까? g 카메라의 뷰 방향에 대해 꼭지점이 나열된 순서를 통하여 불필요한 삼각형 예를 들 어, 안보이는 뒷면에 해당하는을 제거할 수 있는데, OpenGL에서는 이러한 과정이 어느 좌표계에서 수행이 될까? h 정상적인 렌더링 상황에서 3차원 좌표점 을 동차좌표 x, y, z, w로 표현할 때 순간 적으로 w가 1이 아닌 값이 나타날 수 있는 OpenGL 좌표계 이름은? i 원근 투영을 사용하여 렌더링을 할 경우, OpenGL 뷰잉 파이프라인에서 정확히 어 느 좌표계에서 어느 좌표계로 넘어갈 때, 원근감이 생성이 되는가? 년 4월 26일목 오후 7:00 AS 414 c 2012 서강대학교 공과대학 컴퓨터공학과 임인성

6 서강대학교 공과대학 컴퓨터공학과 j OpenGL의 뷰잉 파이프라인에서 카메라 의 위치와 방향을 설정 해주는 변환은 정 확히 어느 좌표계에서 어느 좌표계로 보내 주는 변환인가? k OpenGL의 뷰잉 파이프라인에서촬영한 필 름을 현상한 후 인화지에 확대/인화하는 과 정은 정확히 어느 좌표계에서 어느 좌표계 로 보내주는 과정에 해당하는가? l 만약 여러분이 glscalefx, y, z 함수를 가장 적은 회수의 덧셈/뺄셈, 곱셈, 그리고 나눗셈 연산을 사용하여 구현한다고 할 때 각각 몇 번씩 수행해야 할까? 여기서 스택 에 있는 4행 4열 행렬은 임의의 값을 가질 수 있다고 가정하고, 답은 +/-= 번, *= 번, /= 번과 같이 기술하라. m 정상적인 렌더링 상황에서 Projection Matrix Stack의 탑에 있는 행렬에 곱해지는 꼭 지점 좌표가 존재하는 OpenGL 좌표계 이 름은? n 3차원 공간의 두 벡터 p = px py pz t 와 q = qx qy qz t 에 대하여 외적 cross product 연산을 가한 벡터 r = p q = rx ry rz t 의 y 좌표 ry 의 값을 기술하라. CSE4170 기초 컴퓨터 그래픽스 중간고사 6/9 f 59번의 이동 변환 관련 문장이 수행되기 직전의 모델뷰 행렬 스택의 내용을 정확 하게 그려라. MV MP, MV P 와 그림 7 의 행렬 기호등을 적절히 사용하라. 현재 draw wheel and nutangle 함수는 100번 문 장에서 호출한 상태임. g 52번 문장의 draw wheel and nutangle 함 수에서 이상한 부분을 지적하고 수정하라. 이유를 설명할 것. h 이 프로그램에서 사용하는 변수들을 사용 하여 정규 디바이스 좌표계 NDC의 좌표 xnd, ynd 를 윈도우 좌표계 WdC의 좌표 xwd, ywd 로 어떻게 변환 시켜주는지 뷰폿 변환x와 y 좌표에 대해서만을 유도하라. i 이 프로그램에서 뷰 매핑과 가장 관련이 많 은 문장의 번호를 기술하라. j 이 프로그램에서 자동차를 세상 좌표계로 배치해주는 모델링 변환이 강체 변환인지 아닌지 답하고 그 이유를 간략히 설명하라. o glulookat-1.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.9, 0.0; 문장 수행 시 계산이 되는 뷰잉 변환 행렬 MV = mij, i, j = 1, 2, 3, 4의 세 번째 행의 원소들 m31, m32, m33, m34 의 내용을 기술하라. 9. 시험지 뒤에 첨부한 프로그램은 적절한 모델링 변환을 통하여 자동차를 그려주는 OpenGL 프 로그램이다. 이 프로그램을 보면서 답하라. a 이 프로그램은 그림 7에 주어진 자동차에 대한 트리 구조를 어떤한 방식으로 탐색을 하고 있는가? 자료 구조 시간에 배운 용어 를 사용할 것. b 이 프로그램에서 원근 나눗셈과 가장 관련 이 있는 문장의 번호는? c 이 프로그램에서는 사용자가 어떠한 방식 으로 자동차를 앞으로 움직이게 할수 있을 까? 정확하게 기술할 것. d 세상 좌표계 WC를 기준으로 할 때 카메 라가 세상을 바라보는 방향 벡터를 필요 시 이 프로그램에서 사용하는 변수들을 사 용하여 표현하라. e 눈 좌표계 EC를 기준으로 할 때 카메라 가 세상을 바라보는 방향 벡터를 필요 시 이 프로그램에서 사용하는 변수들을 사용 하여 표현하라 년 4월 26일목 오후 7:00 AS 414 c 2012 서강대학교 공과대학 컴퓨터공학과 임인성

7 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 7/9 Figure 7: 자동차의계층적표현 년 4 월 26 일 목 오후 7:00 AS c 2012 서강대학교공과대학컴퓨터공학과임인성

8 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 8/9 filename mvcar.cpp page 1 1 #include <stdio.h> 2 #include <math.h> 3 #include <GL/glut.h> #define MAX_POLY #define MAX_VERT 20 7 #define MAX_PATH #define DRAW_CAR_DUMMY #define DRAW_CAR_CORRECT typedef struct { 13 int nvertex; 14 float poly[max_vert][3]; 15 mypolygon; mypolygon body[max_poly], wheel[max_poly], nut[max_poly]; 18 int npolyb, npolyw, npolyn; float path[max_path][3]; 21 int npath, path_exist, drawing_state = DRAW_CAR_CORRECT; double dist; int prev_i, cur_i = 0; 26 int rightbuttonpressed = 0; void read_objectchar *file, mypolygon *object, int *npoly; 29 void read_pathchar *file; 30 void read_objectsvoid; 31 void draw_axesvoid; 32 void draw_pathvoid; 33 void draw_groundvoid; void draw_bodyvoid { 36 // Draw the body void draw_wheelfloat angle { 41 // Draw the wheel void draw_nutvoid { 46 // Draw the nut #define rad #define ww void draw_wheel_and_nutfloat angle { 53 int i; draw_wheelangle; // draw wheel object 56 for i = 0; i < 5; i++ { 57 // nut i 58 glpushmatrix; 59 gltranslatefrad-0.5, 0, ww; // rad = 1.7, ww = glrotatef72.0*i, 0.0, 0.0, 1.0; 61 draw_nut; // draw nut object 62 glpopmatrix; #define TO_DEG void normalize_vec3float *v { float dot_prod_vec3float *u, float *v { float compute_length_mul_two_vec3float *u, float *v { float angle_between_two_vec3float *u, float *v { void cross_prod_vec3float *u, float *v, float *n { 84 //??? float wheel_rot_angle_in_yvoid { float wheel_rot_angle_in_zvoid { void draw_car_dummyvoid { 97 draw_body; // draw body object 98 glpushmatrix; 99 gltranslatef-3.9, -3.5, 4.5; 100 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 104 gltranslatef3.9, -3.5, 4.5; 105 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 109 gltranslatef-3.9, -3.5, -4.5; 110 glscalef1.0, 1.0, -1.0; 111 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 115 gltranslatef3.9, -3.5, -4.5; 116 glscalef1.0, 1.0, -1.0; 117 draw_wheel_and_nut0.0; // wheel glpopmatrix; void set_up_rot_matfloat *m, int i { void draw_fenceglfloat r, GLfloat g, GLfloat b { printed at 4/20/103, 23: 년 4 월 26 일 목 오후 7:00 AS c 2012 서강대학교공과대학컴퓨터공학과임인성

9 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 9/9 filename mvcar.cpp page void draw_fencesvoid { void draw_world void { 134 GLfloat m[16]; glmatrixmodegl_modelview; // Modeling Transformation 137 glloadidentity; 138 glulookat-15.0, 20.0, 40.0, path[cur_i][0], 4.89, path[cur_i][2], 0.0, 1.0, 0.0; draw_ground; 141 draw_fences; 142 draw_axes; 143 if path_exist draw_path; set_up_rot_matm, cur_i; glpushmatrix; 148 gltranslatefpath[cur_i][0], 4.89, path[cur_i][2]; 149 glmultmatrixfm; draw_car_dummy; 152 glpopmatrix; void rendervoid { 156 glcleargl_color_buffer_bit; 157 draw_world; 158 glutswapbuffers; void keyboard unsigned char key, int x, int y { int prevx_mouse; 166 void mousepressint button, int state, int x, int y { 167 if button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN { 168 prevx_mouse = x; 169 rightbuttonpressed = 1; else if button == GLUT_RIGHT_BUTTON && state == GLUT_UP 172 rightbuttonpressed = 0; void mousemoveint x, int y { 176 double deltax; if rightbuttonpressed { 179 deltax = x - prevx_mouse; 180 prevx_mouse = x; 181 if cur_i + deltax > 0 && cur_i + deltax < npath-1 { 182 prev_i = cur_i; cur_i += deltax; 183 dist = sqrtpath[cur_i][0]-path[prev_i][0]*path[cur_i][0]-path[prev_i][ 0] path[cur_i][1]-path[prev_i][1]*path[cur_i][1]-path[prev_i][1] path[cur_i][2]-path[prev_i][2]*path[cur_i][2]-path[prev_i][2] ; 186 if deltax < 0.0 dist *= -1.0; 187 glutpostredisplay; void reshapeint width, int height { 193 glviewport0, 0, width, height; glmatrixmodegl_projection; 196 glloadidentity; 197 gluperspective30.0, width/double height, 1.0, 150.0; void init_openglvoid { void init_windowsvoid { 205 glutinitdisplaymodeglut_rgb GLUT_DOUBLE; 206 glutinitwindowsize1280, 1024; 207 glutcreatewindow"car in Hierarchy 2"; 208 glutdisplayfuncrender; 209 glutkeyboardfunckeyboard; 210 glutmousefuncmousepress; 211 glutmotionfuncmousemove; 212 glutreshapefuncreshape; void mainint argc, char **argv { 216 read_objects; 217 glutinit&argc, argv; 218 init_windows; 219 init_opengl; 220 glutmainloop ; printed at 4/20/103, 23: 년 4 월 26 일 목 오후 7:00 AS c 2012 서강대학교공과대학컴퓨터공학과임인성

10 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 1/8 [CSE4170: 기초컴퓨터그래픽스 ] 중간고사 담당교수 : 임인성 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 1. 다음은 2 차원기하변환에관한문제이다. a 점 4, 5 를중심으로물체의크기를두배확대해주는 3 행 3 열의기하변환행렬 M 을이동변환 T t x, t y, 크기변환 Ss x, s y, 회전변환 Rθ 등의기본변환행렬을사용하여합성하려한다. i. M 을세개의기본변환행렬의곱으로표현하라. ii. M 을두개의기본변환행렬의곱으로표현하라. b 임의의점 x, y 를 y, x 로변환해주는 3 행 3 열의기하변환행렬 M 을위문제에주어진기본변환행렬을사용하여표현하라. c T t x, t y S1, 1 = S1, 1T α, β 라할때, α 와 β 의값은? d RθS1, 1 = S1, 1Rγ 라할때, γ 의값은? e 임의의각도 θ 에대해 c = cosθ 와 s = sinθ 라하자. RθT t x, t y = T δ, ϵrθ 이라할때, δ 와 ϵ 의값을 t x, t y, c, s 등을사용하여표현하라. 2. 그림 1 과아래코드를고려하자. void display void {. glcleargl COLOR BUFFER BIT; draw axes text line; draw airplane; // Draw A glpushmatrix; // Transforms for B draw airplane; // Draw B B A D Figure 1: 2 차원기하변환 glpopmatrix; glpushmatrix;. draw airplane; // Draw C glpopmatrix; glpushmatrix; gltranslatefh/4.0, 0.0, 0.0; glrotatef45.0, 0.0, 0.0, 1.0; glscalefsx, sy, 1.0; glrotatef-45.0, 0.0, 0.0, 1.0; gltranslateftx, ty, 0.0; glrotatef270.0, 0.0, 0.0, 1.0; glscalef2.0, 2.0, 1.0; draw airplane; // Draw D glpopmatrix;. 아래문제에서요구하는 2 차원기하변환을다음 OpenGL 함수들을적절히사용하여 C 언어문법에맞게정확히기술하라. 함수호출순서는 OpenGL 프로그래밍관례에따르고, 이동 C 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

11 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 2/8 변환이필요하다면 z 값은 0 으로, 크기변환이필요하다면 z 값은 1 로설정할것. void gltranslatefglfloat x, GLfloat y, GLfloat z; void glscalefglfloat x, GLfloat y, GLfloat z; void glrotatefglfloat angle, GLfloat x, GLfloat y, GLfloat z; a // Draw X 라인의 draw airplane; 문장은각각이그림에서 X 로표시된비행기를그려주고있다. B 비행기는 A 비행기를세배확대하여원점둘레로시계방향으로 270 도회전한후, 그중심을 W/4.0, H/4.0 지점으로이동시켜그린상태를보여주고있다. 이러한그림이그려지도록 // Transforms for B 부분의내용을 OpenGL 함수를사용하여기술하라. b 비행기 C는비행기 A를시계방향으로 90 도회전한후, 그중심을 W/2.5, H/8.0 지점으로이동시켜그린상태를보여주고있다. 지금그러한비행기 C를두배확대한후 y = x H 4.0 둘레로반사시켜비행기 D를그려주려한다. 이때필요한 sx, sy 와 tx, ty의내용을정확히기술하라. c 비행기 D 를그려주는코드는아래와같이단순화시킬수있다. glpushmatrix; gltranslatefttx, tty, 0.0; glrotatefra, rx, ry, rz; glscalefssx, ssy, 1.0; draw airplane; // Draw D glpopmatrix; 이때필요한 ttx, tty, ra, rx, ry, rz, ssx, ssy 의내용을정확히기술하라. b 이행렬의왼쪽 - 위쪽의 3 행 3 열부행렬의세개의열벡터를각각 r 1, r 2, r 3 라할때, 이세개의벡터가만족하는수학적인성질을정확히기술하라. c n 에회전변환을가하려면 M 1 t 에 n 을곱하면된다. 이때 M 1 t 의내용을정확히기술하라. 4. DOP Direction of Projection 가 2, 2, 2 이고 PP Projection Plane 가 2x + 2y + 2z = 1 인평행투영의변환행렬이다음과같다고하자. M = e f g h i j k l m n o p q r s t a 네번째행의 q, r, s, t 값을기술하라. b 첫번째행의 e, f, g, h 값을유도하라 유도과정을기술할것. 5. 다음은 OpenGL 을사용한 3 차원뷰잉에관련된문제이다. 아래그림과코드를보고답하라. a 프로그램초기수행모습 소가여러분을향해있음 3. 3 차원공간에주어진법선벡터 normal vector n = nx, ny, nz t 에대하여회전변환을가하는문제를고려하자. a 회전변환행렬 M을아래와같이정의한다면, r 11 r 12 r 13 v 1 r M = 21 r 22 r 23 v 2 r 31 r 32 r 33 v 3, 이때 v 1, v 2, v 3 의값은어떤값을가질까? b r 키를 16 번누른후의모습 즉 90 도회전한모습 Figure 2: 간단한 3 차원뷰잉 빨강, 초록, 파랑색깔의세직선은각각세상좌표계에서의 x w, y w, z w 축을나타냄 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

12 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 3/8 void displayvoid { glcleargl COLOR BUFFER BIT; glmatrixmodegl MODELVIEW; glloadidentity; glulookat,,,,,,,, ; // ModelView matrix draw axes; glcolor3f0.2, 0.5, 0.2; glpushmatrix; // We need a modeling transform here. draw cow; glpopmatrix; glflush; a 위의코드에서 draw cow 함수는자신의모델링좌표계 Modeling Coordinate, MC 에서정의된소를구성하는삼각형을그려주는함수이다. 그림 2a 는이소를각축방향으로 5 배확대하여, x 축둘레로 90 도회전한후, 5.0, 5.0, 1.5 만큼이동시켜그려준상태를보여주고있다. 이때 // We need a modeling transform here. 에들어갈내용을 OpenGL 함수를적절히사용하여기술하라 2 번문제에기술된 OpenGL 함수정의를참고할것. b r 키를누를때마다 int rotangle = 0; 과같이정의된전역변수 global variable rotangle 에대해다음과같은내용의코드가수행된다고가정하자. case r : rotangle = rotangle+5%360; glutpostredisplay; break; 이에반응하여 r 키를한번씩누를때마다, 위의문제에서와같이세상좌표계 World Coordinate, WC 에배치된소가이좌표계에서 5.0, 5.0, 1.5 점을지나고 z w 축 그림에서수직방향의축 에평행한직선둘레로 5 도씩회전하도록하려한다 그림 2b 참조. 위문제에서기술한여러분의코드를어떻게확장하면될지정확히기술하라. c 이문제에서는카메라가세상좌표계의 15.0, 5.0, 1.5 지점에서 5.0, 5.0, 1.5 지점을바라보고있으며, 양의 z w 방향이위쪽방향으로설정되어있다. 이에필요한 glulookat 함수의 9 개인자를정확히기술하라. d 이프로그램이정상적으로수행될때 // ModelView matrix 시점에서모델뷰행렬스택의탑에있는 4 행 4 의뷰잉변환행렬 M V 의내용을정확히기술하라. e 이뷰잉변환행렬 M V 는세상좌표계의벡터 5.0, 5.0, 1.5 t 를눈좌표계 Eye Coordinate, EC 의어떤점으로변환해줄까? f M V 는 M V = RT 와같이회전변환과이동변환을나타내는두개의 4 행 4 열행렬 R 과 T 의곱으로표현이가능한데, 이때 R 과 T 의내용을정확히기술하라. g M V 의역행렬을 MV 1 = T 1 R 1 과같이이동변환행렬 T 1 과회전변환행렬 R 1 의곱으로표현할때 4행 4열행렬인 R 1 의내용을기술하라. h M V 의역행렬을 MV 1 = R 2 T 2 와같이회전변환행렬 R 2 와이동변환행렬 T 2 의곱으로표현할때 4행 4열행렬인 T 2 의내용을기술하라. 6. OpenGL 에서는그림 3 에도시한바와같이눈좌표계 EC 상에서 glortho* 함수를사용하여직교투영을위한뷰잉볼륨을설정하면, 이안의내용이정규디바이스좌표계 NDC 의정규화된정육면체영역으로뷰매핑된다. a 이때절단좌표계 Clip Coordinate, CC 상에서의절단 clipping 과정후정규디바이스좌표계 Normalized Device Coordinate, NDC 로투영된꼭지점의 x nd 와 y nd 의좌표값은각각어떤범위의값을가질수있을까? Figure 3: glorthol, r, b, t, n, f 함수 b 이함수가호출될때생성되는투영변환행렬 M ortho 를기본변환행렬 T x, y, z 이동변환, Sx, y, z 크기변환, Rangle, x, y, z 회전변환 등의곱 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

13 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 4/8 으로표현하라. 뷰매핑과정에서투영방향이반대로바뀌게되는것을유념할것. c M ortho 는다음과같이하나의행렬로나타낼수있는데, 이때 α, β, 그리고 γ 값이무엇인지기술하라. M ortho = 2 r l 0 0 r+l r l 0 α 0 t+b t b 0 0 β γ 다음은색깔혼합에관한문제이다. c S α S 와 c D α D 를각각 S 와 D 이미지의대응되는화소의미리곱한색깔 pre-multiplied color 이라할때, 두색깔의합성을통하여생성한결과색깔 c O α O 는다음과같이표현할수있다. co α O = F S cs α S + F D cd α D a 만약값이 0.3, 0.3, 0.3, 0.3 인미리곱한색깔로어떤화소를칠한다고할때, 이는그화소를어떻게칠한다는것인지정확히기술하라. b 그림 4 에도시하는합성연산의경우 F S 와 F D 의값은각각얼마인가? Figure 4: 합성예 1 c 만약 S over D 연산을적용한다면, 합성후 α O 는어떤값을가질지그식을 S 와 D 의관련값을사용하여정확히기술하라. d 그림 5 와같은상황을생각해보자. 지금관찰자가세개의물체 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 을앞에서뒤로가면서 frontto-back order 합성한다고할때의불투명도 α 01 값이무엇일지정확히기술하라. α 0 C 0 α 1 C 1 Figure 5: 합성예 2 α 2 =1.0 2 C e 바로위문제에서와같이 M 0 와 M 1 을앞에서뒤로가면서합성한다고할때의결과색깔 C 01 값이무엇일지, 위문제의인자를사용하여정확히기술하라. 여기서 C 0, C 1, 그리고 C 01 은미리곱한색깔이아닌원래의 RGB 색깔을의미함. f 위문제에서모든합성이끝난후결과적으로눈에보이는색깔 C 012 는무엇일지위문제의인자를사용하여정확히기술하라. g 아래의프로그램에서함수 test0 을수행시킬경우그림 6a 와같이서로다른색깔로칠해지는여러영역을볼수있는데, 이때 1 번영역과 2 번영역의 RGB 색깔을정확히기술하라. 주의 : RGB 각채널값은 0 과 1 사이의값을가짐 void rectglfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat R, GLfloat G, GLfloat B, GLfloat A { glcolor4fr, G, B, A; glbegingl QUADS; glvertex2fl, b; glvertex2fr, b; glvertex2fr, t; glvertex2fl, t; glend; void test0void { glclearcolor0.0, 0.0, 0.0, 0.0; glcleargl COLOR BUFFER BIT; glenablegl BLEND; glblendfuncgl ONE, GL ZERO; rect-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0; glblendfuncgl SRC ALPHA, GL DST ALPHA; rect-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0; rect0.0, 4.8, -4.8, 2.0, 0.0, 0.0, 1.0, 1.0; gldisablegl BLEND; void test1void { 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

14 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 5/ x 8. 다음은계층적모델링을통하여자동차를그려주는 OpenGL 프로그램으로서, 사용자가마우스를사용하여자동차를경로를따라대화식으로 interactively 움직일때, 네바퀴가적절한속도로진행방향으로회전하며, 특히두앞바퀴는자동차의진행방향에따라적절히좌우로도회전을하도록코딩이되어있다 그림 7 참조. 이프로그램과그림 8 을보면서답하라. a test0 수행결과 x b test1 수행결과 Figure 6: 색깔의혼합 glclearcolor0.0, 0.0, 0.0, 0.0; glcleargl COLOR BUFFER BIT; glenablegl BLEND; glblendfuncgl ONE, GL ZERO; rect-2.0, 4.0, -2.0, 4.0, 0.0, 1.0, 0.0, 1.0; glblendfunca, B; rect-3.5, 3.0, -3.5, 3.0, 1.0, 0.0, 0.0, 1.0; gldisablegl BLEND; h 다음함수 test1 을수행시켰을때그림 6b 와같은결과를얻으려면, 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 Figure 7: 자동차그리기 void draw wheel and nutvoid { int i; draw wheel; // draw wheel object for i = 0; i < 5; i++ { glpushmatrix; glrotatef72.0*i, 0.0, 0.0, 1.0; gltranslatef1.2, 0, 1.0; draw nut; // draw nut object glpopmatrix; void draw car correctvoid { float angle 1, angle 2; angle 1 = wheel rot angle in 1; angle 2 = wheel rot angle in 2; draw body; // draw body object glpushmatrix; gltranslatef-3.9, -3.5, 4.5; glrotatefangle 1, 0.0, 1.0, 0.0; glrotatefangle 2, 0.0, 0.0, 1.0; draw wheel and nut; // wheel 0 glpopmatrix; glpushmatrix; gltranslatef-3.9, -3.5, -4.5; glrotatefangle 1, 0.0, 1.0, 0.0; glrotatefangle 2, 0.0, 0.0, 1.0; 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

15 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 6/8 glscalef1.0, 1.0, -1.0; draw wheel and nut; // wheel 1 glpopmatrix; glpushmatrix; gltranslatef3.9, -3.5, 4.5; // Need a transform draw wheel and nut; // wheel 2 glpopmatrix; glpushmatrix; gltranslatef3.9, -3.5, -4.5; // Need a transform glscalef1.0, 1.0, -1.0; draw wheel and nut; // wheel 3 glpopmatrix; void draw worldvoid { GLfloat m[16];. set up rot matm, cur i; glmatrixmodegl MODELVIEW; glloadidentity; glulookat-15.0, 20.0, 40.0, path[cur i][0]+3, 4.89, path[cur i][2]+3, 0.0, 1.0, 0.0; gltranslatefpath[cur i][0], 4.89, path[cur i][2]; glmultmatrixfm; draw car correct; a 이프로그램에서자동차를세상좌표계로배치해주는모델링변환이강체변환인지아닌지 예 / 아니오 로답하고그이유를간략히설명하라. b 문제삭제 c 눈좌표계를기준으로할때카메라가세상을바라보는방향을벡터로표현하라. d 문맥상이코드에서그림 8 의 M b 행렬의내용을결정하는기하변환관련문장을모두정확히기술하라. e 문맥상이코드에서그림 8 의 M 4 n 행렬의내용을결정하는기하변환관련문장을모두정확히기술하라. f 이프로그램에서는 // wheel 0 과 // wheel 1 문장에서각각앞바퀴를그려주고있다. 문맥상이문장들의바로앞 glrotatefangle 1, 0.0, 1.0, 0.0; 문장은어떤기하변환을목적으로하는지정확히기술하라 그림 8 을잘보고답할것. g 앞문제에이어 문맥상이두문장의바로앞 glrotatefangle 2, 0.0, 0.0, 1.0; 문장은어떤기하변환을목적으로하는지정확히기술하라. h 위의두문제를생각할때, 문맥상 // wheel 2 과 // wheel 3 문장앞의 // Need a transform 부분에공통적으로들어갈내용을기술하라. 9. 다음은 OpenGL 시스템의 fixed-function 파이프라인에관한단답식문제이다. 그림 9 를보면서, OC Object Coordinate, CC, EC, MC, NDC, WC, WdC Window Coordinate 등의좌표계이름을참고하여적절히답하라. a 원근투영을사용하여렌더링을할경우, 원근감이생성되는시점과가장관련이많은 box 의기호를기술하라. b OpenGL 에서는꼭지점이나열된순서정보를통하여불필요한삼각형을제거할수있는데, 이와가장관련이많은 box 의기호를기술하라. c G box 와 H box 사이의지점에해당하는 OpenGL 좌표계의이름은? d 정상적인렌더링상황에서좌표점을동차좌표 x, y, z, w 로표현할때순간적으로 w 가 1 이아닌값이나타날수있는데, 이러한좌표값을기반으로수행되는어떤제거계산과가장관련이높은 box 의기호를기술하라. e 정상적인기하변환을할경우전체파이프라인과정에서항상강체변환이사용되는부분은어느좌표계에서어느좌표계로의변환에해당하는가? f OpenGL 렌더링파이프라인에서 정규화된필름 에해당하는좌표계는이그림에서어느 box 와어느 box 사이일까? g 촬영한사진을현상한후, 인화지에확대하는과정과가장밀접한관련이있는 box 의기호를기술하라. h 정상적인기하변환을할경우주어진물체의꼭지점에대해실제로모델링변환이적용되는 box 의기호를기술하라 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

16 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 7/8 y x z Figure 8: 자동차의계층적표현 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

17 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 8/8 A B C D E F F G G E E F G H I J K Figure 9: OpenGL fixed-function 렌더링파이프라인 년 4 월 27 일 수 오후 3:00 AS c 2011 서강대학교공과대학컴퓨터공학과임인성

18 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 1/7 [CSE4170: 기초컴퓨터그래픽스 ] 중간고사 담당교수 : 임인성 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 1. 다음물음에답하라. 2. 다음행렬 M 2 를보고답하라 M 2 = a 동차좌표점 2.0, 0.0, 8.0, 0.5 에해당하는유클리드공간에서의점의좌표는? b RGB 색깔모델로표현된색깔 0.7, 0.6, 0.1 을 CMY 색깔모델을사용하여표현했을때의값은? c 3차원기하변환을나타내는 4행 4열행렬이아핀변환인지아닌지를어떻게구별할수있을까? d 투영참조점이무한대점 point at infinity 에위치한투영변환에관련된 OpenGL 함수의이름은? e gluperspectivefovy, asp, n, f 함수에대한변환행렬 M pers 는다음과같다. 이행렬을이용하여원근투영시 EC의점 x e,y e,z e 가 NDC의점 x nd,y nd,z nd 로변환되는과정에서원근감이생성되는수학적인과정을설명하라. cot fovy 2 asp cot fovy f+n f n 2nf f n a 3차원공간에서동일한직선상에존재하는세점 p 0, p 1, 그리고 p 2 에대하여 p 0 p 2 : p 0 p 1 = 3 : 1이라하자. p 0, p 1, 그리고 p 2 를각각위의세점을 M 2를사용하여변환한점이라할경우비율 p 0 p 2 : p 0 p 1 은얼마가될까? b M 2 는강체변환에해당하는행렬일까? 예 / 아니오 로답하고그이유를수학적으로밝혀라. c M 2 를두개의기본변환행렬의곱으로표현하라. d M 2 의역행렬 M2 1 을하나의 4행 4열행렬로표현하라. 어떤식으로계산하였는지밝힐것. 3. 그림 1에서와같이 2차원공간의점 p를직선 L에대하여반사시켜 p 으로변환시켜주는 2차원기하변환을다음 OpenGL 함수들을적절히사용하여 C언어문법에맞게정확히기술하라. 함수호출순서는 OpenGL 프로그래밍관례에따르고, 이동변환이필요하다면 z값은 0으로, 크기변환이필요하다면 z값은 1로설정할것 년 4 월 28 일 수 오후 7:00 -

19 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 2/7 y 매핑이된다. p' L a 이때절단좌표계 CC 상에서의절단 clipping 과정후 NDC로투영된꼭지점의 x nd 와 y nd 의좌표값은각각어떤범 p 위의값을가질수있을까? 1 45 x 0 3 y e 2 그림 1: 직선에대한반사 void gltranslatefglfloat x, GLfloat y, GLfloat z; void glscalefglfloat x, GLfloat y, GLfloat z; void glrotatefglfloat angle, GLfloat x, GLfloat y, GLfloat z; 4. 그림 2에서와같이왼편의윈도우의내용을오른쪽윈도우로매핑해주는 2차원변환에대한 3행 3열행렬 M 4 를기본변환행렬 T x, y 이동변환, Sx, y 크기변환, Rangle 회전변환 등의합성을통하여표현하고, 전체곱행렬을구하라. 그림 2: 윈도우매핑 ze l, b, 0 x e r, t, 0 그림 3: glorthol, r, b, t, n, f 함수 b 이함수가호출될때생성되는투영변환행렬 M ortho 를기본변환행렬 T x, y, z 이동변환, Sx, y, z 크기변환, Rangle, x, y, z 회전변환 등의곱으로표현하라. 뷰매핑과정에서투영방향이반대로바뀌게되는것을상기할것. c M ortho 는다음과같이하나의행렬로나타낼수있는데, 이때 α, β, 그리고 γ 값이무엇인지기술하라. 2 r l 0 0 r+l r l 0 α 0 M ortho = t+b t b 0 0 β γ 다음의 2차원기하변환에관한프로그램을보고답하라. -n 1 -f 5. OpenGL에서는그림 3에도시한바와같이눈좌표계 EC 상에서 glortho* 함수를사용하여직교투영을위한뷰잉볼륨을설정하면, 이안의내용이정규디바이스좌표계 NDC 의정규화된정육면체영역으로뷰 int iii = 0; void displayvoid { glcleargl COLOR BUFFER BIT; glmatrixmodegl MODELVIEW; glpushmatrix; glrotatefiii*90.0, 0.0, 0.0, 1.0; 년 4 월 28 일 수 오후 7:00 -

20 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 3/7 그림 4: OpenGL 을사용한 2 차원기하변환 gltranslatef-250.0, , 0.0; glbegingl TRIANGLES; glvertex2f500.0, 0.0; glvertex2f500.0, 500.0; glvertex2f0.0, 500.0; glend; glpopmatrix; glflush; void sogangint button, int state, int x, int y { if button == GLUT LEFT BUTTON && state == GLUT DOWN iii = iii+1%4; glutpostredisplay; void universityint width, int height { glviewport0, 0, width, height; glmatrixmodegl PROJECTION; glloadidentity; glortho0.0, double width, 0.0, double height, -1.0, 1.0; glutpostredisplay; void OpenGLInitandRegisterCallbackvoid { glclearcolor1.0, 1.0, 1.0, 1.0; glpolygonmodegl FRONT AND BACK, GL FILL; glcolor3f1.0, 0.0, 0.0; glutdisplayfuncdisplay; glutreshapefuncuniversity; glutmousefuncsogang; void main int argc, char **argv { glutinit&argc, argv; glutinitdisplaymodeglut RGBA; glutinitwindowsize500, 500; glutcreatewindow"midterm Problem"; OpenGLInitandRegisterCallback; glutmainloop; a 이프로그램은사용자가어떤행동 action 을취할때마다, 네번을주기로화면의내용이반복된다. 과연어떤행동인지정확히기술하라. b 사용자가위문제의행동을취할때화면의그림이어떤식으로순환하는지, 그림 4와같은방식으로그려라. 도형의모양과위치를가급적정확히표시하고어떤부분이적색영역인지분명히밝힐것. c 만약그림 4에도시한방식으로화면이바뀌도록하려면이프로그램을어떻게수정해야하는가? 어느함수의어떤문장과어떤문장사이에어떤문장 들 을삽입함 과같이표시하고, 삽입할문장 들 을 OpenGL 함수들을적절히사용하여 C언어문법에맞게정확히기술하라 년 4 월 28 일 수 오후 7:00 -

21 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 4/7 d 원래의프로그램상태에서 university 함수의 glortho 함수문장을아래와같이수정할경우화면의내용이어떻게반복될지, 그림 4와같은방식으로그려라. glortho0.0, width/2.0, 0.0, height/2.0, -1.0, 1.0; e 원래의프로그램상태에서 university 함수의 glortho 함수문장직전에아래와같은문장을삽입할경우화면의내용이어떻게반복될지, 그림 4와같은방식으로그려라. glscalef0.5, 0.5, 1.0; 힌트 : 앞문제의직교투영변환을잘생각해보고, 이크기변환이직교투영에어떤영향을미치는지를생각해볼것 7. 그림 5에서주어진점 p =xyz1 t 을 p = x y z 1 t 로변환해주는 4행 4열의원근투영변환행렬 M 7 을기술하라. x v[0] = ; // Line A 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 vec3u; cross prod vec3u, v, n; m[0] = ; m[15] = 1.0; minv[0] = ; minv[15] = 1.0; void dispalyvoid { GLfloat m[16], minv[16]; glcleargl COLOR BUFFER BIT; set up rot matm, minv, cur i; glmatrixmodegl MODELVIEW; y COP = 0, -1, 0 d p' p glloadidentity; B draw axes; draw path; z PP : y = d 그림 5: 원근투영변환예 8. 다음은주어진경로 p[c i][0], 0.0, p[c i][2] 를따라움직이는자동차에서바라본세상을렌더링해주는코드의일부이다 그림 6 참조. void set up rot matfloat *m, float *minv, int i { GLfloat u[3], v[3], n[3]; glpushmatrix; gltranslatefp[c i][0], 4.89, p[c i][2]; glmultmatrixfm; draw car; glpopmatrix; glutswapbuffers; a 지금 glmultmatrixfm; 에해당하는기하변환후, gltranslatefp[c i][0], 4.89, p[c i][2]; 에해당하는기하변환을통하여자동차의 body를세상좌표계로보내주고있다. 문맥상행렬 m이나 년 4 월 28 일 수 오후 7:00 -

22 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 5/7 y R90, 0, 1, 0 T-3, 0.5, 2.5 x z a 운전석카메라프레임 b 세상에서본모습 c 운전석에서바라본세상 그림 6: 자동차그리기 타내는기하변환은이동변환, 크기변환, 회전변환중어떤변환에해당할까? b Line A 에서는 v 벡터의값 v[0], v[1], v[2] 의값을설정하고있는데, 각원소값은문맥상어떤값으로설정되어야할까? 세상좌표계와 body의모델링좌표계모두위쪽이 y축방향에해당함. c 문맥상 set up rot mat 함수안에서배열 m과 minv의값을설정하고있는데, m[4] 와 minv[4] 에저장되어야하는각값을 C 언어문법에맞게기술하라. OpenGL에서의기하변환행렬원소의저장순서를고려할것. d 다음은 set up rot mat 함수안에서호출하는 cross prod vec3 함수의정의이다. n[1] 변수에설정되는값이무엇인지그식을 C 언어문법에맞게기술하라. void cross prod vec3float *u, float *v, float *n { n[0] = ; n[1] = ; n[2] = ; e 그림 6a 는 body의모델링좌표계상에서운전석에카메라를배치하는과정을보여주고있다. 만약자동차를세상에배치한후, 이카메라에서세상을바라보는장면을렌더링할때의뷰잉변환행렬 M V 를기본변환행렬 T x, y, z 이동변환, Sx, y, z 크기변환, Rangle, x, y, z 회전변환 이나이프로그램의변수 m과 minv가나타내는 M m 과 M minv 등의곱으로표현하라. f 지금운전석에배치한카메라를사용하여렌더링한다고가정할때, display 함수의 B 에들어갈뷰잉변환코드를 OpenGL 함수들을적절히사용하여 C언어문법에맞게정확히기술하라. 9. 다음은 OpenGL 프로그램에서뷰잉변환을설정하고있는예를보여주고있다. glmatrixmodegl MODELVIEW; glloadidentity; 년 4 월 28 일 수 오후 7:00 -

23 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 6/7 glulookat0.0, 0.0, 10.0, 10.0, 0.0, 10.0, 0.0, 1.0, 0.0; a 이코드를수행할때적용되는뷰잉변환행렬 M V 의내용을하나의 4행 4열행렬로표현하라. b 원래의코드에서 glulookat*; 문장을아래와같은두문장으로대치하려하는데, 같은내용의그림이그려지도록하기위해서는각문장의인자가무엇이되어야하는지정확히기술하라. glrotatef*, *, *, *; gltranslatef*, *, *; 10. 다음 OpenGL 코드를보고 draw object 함수가그려주는네개의물체 OBJ1, OBJ2, OBJ3, 그리고 OBJ4 간에존재하는계층성을이진트리로표현하라. glpushmatrix; glrotatefangle, 0.0, 1.0, 0.0; gltranslatef0.0, 0.0, 5.0; glscalef6.5, 6.5, 6.5; draw objectobj1; glpushmatrix; glrotatef10.0*angle, 1.0, 0.0, 0.0; gltranslatef-0.1, 0.0, 0.3; glscalef0.025, 0.025, 0.025; draw objectobj2; glrotatef40.0*angle, 1.0, 0.0, 0.0; gltranslatef0.0, 4.0, 0.0; glscalef0.4, 0.4, 0.4; draw objectobj3; glpopmatrix; gltranslatef0.15, 0.3, 0.0; glscalef0.3, 0.3, 0.3; draw objectobj4; glpopmatrix; 11. 다음은 OpenGL 시스템의 fixed-function 파이프라인에관한단답식문제이다. 그림 7을보고, OC, CC, EC, MC, NDC, WC, WdC 등의좌표계이름을참고하여적절히답하라. a 원근투영을사용하여렌더링을할경우, 원근감이생성되는시점과가장관련이많은 box의기호를기술하라. b OpenGL에서는꼭지점이나열된순서정보를통하여불필요한삼각형을제거할수있는데, 이와가장관련이많은 box의기호를기술하라. c G box와 H box 사이의지점에해당하는 OpenGL 좌표계의이름은? d 정상적인렌더링상황에서좌표점을동차좌표 x, y, z, w 로표현할때순간적으로 w가 1이아닌값이나타날수있는데, 이러한좌표값을기반으로수행되는어떤제거계산과가장관련이높은 box의기호를기술하라. e 정상적인기하변환을할경우전체파이프라인과정에서항상강체변환이사용되는부분은어느좌표계에서어느좌표계로의변환에해당하는가? f OpenGL 렌더링파이프라인에서 정규화된필름 에해당하는좌표계는이그림에서어느 box와어느 box 사이일까? g 촬영한사진을현상한후, 인화지에확대하는과정과가장밀접한관련이있는 box의기호를기술하라. h EE box에서수행되는기하변환은항상아핀변환이라고할수있는가? 예또는아니오로답하고그이유를기술하라. i 정상적인기하변환을할경우주어진물체의꼭지점에대해실제로모델링변환이적용되는 box의기호를기술하라 년 4 월 28 일 수 오후 7:00 -

24 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 7/7 A B C D E F F G G E E F G H I J K 그림 7: OpenGL fixed-function 렌더링파이프라인 년 4 월 28 일 수 오후 7:00 -

25 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 1/8 [CSE4170: 기초컴퓨터그래픽스 ] 중간고사문제 담당교수 : 임인성 b 그림 2의 B 로표시된지점에해당하는 OpenGL 좌표계의이름은? c 그림 2의 C 로표시된지점에해당하는 OpenGL 좌표계의이름은? 그림 1: 2차원윈도우매핑변환 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 1. 그림 1에서와같이왼쪽의윈도우의내용을오른쪽윈도우안으로매핑을해주는 2차원아핀변환에대한 3행 3열행렬 M을기본아핀변환의합성을통하여구하라 M을기본변환행렬의곱으로표현한후, 최종결과행렬을반드시기술할것. 2. 다음은 OpenGL에서사용하는기하파이프라인에대한단답식문제이다. CC, EC, MC, NDC, WC, WdC 등의좌표계이름과그림 2에표시된기호를사용하거나, 또는 어떤어떤 box의왼쪽 과같은방식으로적절히그리고정확히답하라. a 그림 2의 A 로표시된지점에해당하는 OpenGL 좌표계의이름은? d 기하변환과정중다각형의꼭지점이나열된순서정보를통하여안보이는뒷면에해당하는다각형을제거할수있는데, OpenGL에서는정확히어떤지점에서이계산이수행되는가? e 정상적인기하변환을할경우전체파이프라인과정에서항상강체변환이사용되는부분은어느좌표계에서어느좌표계로의변환에해당하는가? f OpenGL 렌더링파이프라인에서 정규화된필름 에해당하는좌표계가존재하는위치를그림 2에서찾는다면정확히어디인가? g 정상적으로렌더링할경우, 카메라를배치하기위하여적절한 OpenGL 함수를호출할경우, 가장직접적으로영향을미치는 box는어떤것일까? h 정상적으로렌더링을할경우, glortho 함수가가장직접적으로영향을미치는위치는? i 촬영한사진을현상한후, 인화지에확대하는과정과가장밀접한관련이있는곳은? 년 4 월 25 일 토 오후 1:00 -

26 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 2/8 3. 다음에주어진간단한 3D 뷰잉관련 OpenGL 코드를보고답하라. void displayvoid { glclearcolor0, 0, 0, 1; glcleargl COLOR BUFFER BIT; glcolor3f1.0, 1.0, 1.0; glpolygonmodegl FRONT AND BACK, GL FILL; // LINE A glbegingl TRIANGLES; glvertex2f-2.0, -2.0; glvertex2f0.0, -2.0; glvertex2f0.0, 0.0; glvertex2f-2.0, 0.0; glend; glflush; void reshapeint W, int H { glviewport0, 0, W, H; void RegisterCallbackvoid{ glutdisplayfuncdisplay; glutreshapefuncreshape; void main int argc, char **argv { glutinit&argc, argv; glutinitdisplaymodeglut RGBA; glutinitwindowsize500, 500; glutcreatewindow"sogang CSE"; RegisterCallback; glutmainloop; a 위코드를수행할경우 크기의윈도우에어떤그림이그려질지, 가급적정확한척도 화면에눈금을표시한다거나하는등의 를사용하여윈도우의내용을도시하라. b 만약이코드의 LINE A 부분에아래의두문장을삽입한후, 프로그램을수행시키면윈도우에어떤그림이그려질까? 위문제와마찬가지로가급적정확한척도를사용하여그내용을도시하라. glmatrixmodegl PROJECTION; glortho-2, 2, -2, 2, -1, 1; c 바로위문제에서와같이코드의내용을수행할경우, 어떤심각한문제가발생하는데그것이무엇인지기술하라. d 위두문장이삽입된상태에서그문제를해결하려면코드를어떻게수정해야할까? e 이번에는원래의코드의 LINE A 부분에아래의네문장을삽입한후, 프로그램을수행시키면윈도우에어떤그림이그려질까? 위문제와마찬가지로가급적정확한척도를사용하여그내용을도시하라. glmatrixmodegl MODELVIEW; glloadidentity; gltranslatef1, 1, 0; glscalef0.5, 0.5, 0.5; 4. 다음은 OpenGL의뷰잉변환에관한문제이다. 아래에주어진어떤 display callback 함수의내용을보고답하라. 여기서 glutwireteapot2.0; 문장은원점을중심으로적절한크기의주전자를그려주는역할을한다. void displayvoid { glclearcolor1.0, 1.0, 1.0, 1.0; glcleargl COLOR BUFFER BIT; glcolor3f1.0, 0.0, 0.0; glpolygonmodegl FRONT AND BACK, GL FILL; glmatrixmodegl PROJECTION; glloadidentity; gluperspective34.0, 1.0, 0.5, ; 년 4 월 25 일 토 오후 1:00 -

27 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 3/8 glmatrixmodegl MODELVIEW; glloadidentity; glulookat0.0, 0.0, 10.0, 10.0, 0.0, 10.0, 0.0, 1.0, 0.0; gltranslatef10.0, 0.0, 10.0; glutwireteapot2.0; glflush; e 원래의코드를수행시키면그림 3과같은그림이그려진다. 이코드의 glulookat*; 문장의마지막세인자 0.0, 1.0, 0.0을 0.0, 0.0, 1.0로대치하면어떻게그림이그려질까? a 위코드를수행할때적용되는뷰잉변환행렬 M V 의내용을기술하라. b 원래의코드에서 glulookat*; 문장을아래와같은두문장으로대치하려하는데, 같은내용의그림이그려지도록하기위해서는각문장의인자가무엇이되어야하는지정확히기술하라. glrotatef*, *, *; gltranslatef*, *, *; c 뷰잉변환은세상좌표계에서카메라의프레임을위치시키는것에대응된다. 만약바로위의문제에서와같은상태에서카메라프레임을하나의물체라가정한후, 세상좌표계에서이물체를 x w 축방향으로 3.0만큼이동을시켰다면, 이때의뷰잉변환은 gltranslatef3.0, 0.0, 0.0; 또는 gltranslatef-3.0, 0.0, 0.0; 문장중하나를바로위문제의두문장의적절한위치에삽입하면된다. 과연어떻게하면되는가? 이문제는위문제의정답을기술한사람만풀것. d 원래의코드에서 glulookat*; 문장을아래와같은두문장으로대치하려하는데, 같은내용의그림이그려지도록하기위해서는각문장의인자가무엇이되어야할지정확히기술하라. gltranslatef*, *, *; glrotatef*, *, *; 그림 3: 주전자도시 5. 그림 4에는모델링좌표계 MC 에설계되어있는자동차모델을세상좌표계 WC 로배치해주는과정이도시되어있다 이그림에서 z m 과 z w 축은각각오른손좌표계방향으로되어있음. 그림 4: 모델링변환과뷰잉변환 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 을이동변환, 크기변환, 회전변환등의기본변환행렬의곱으로적절히표현 xm u n ym 년 4 월 25 일 토 오후 1:00 -

28 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 4/8 하라 예를들어, M M = T 1 R 1 T 2 S 1 와같은방식으로표현하고, 각기본변환행렬의내용을정확히기술하되, 전체곱행렬은계산할필요가없음. b C = e, u, v, n 정보를사용하여카메라를배치하려할때적용되는뷰잉변환 M V 를위의문제에서사용한기본변환의행렬또는그의역행렬을가급적많이사용하여표현하라. 6. 그림 5는다음문제와관련한투영변환에대한그림이다. a OpenGL에서 gluperspective60.0, 1.0, 5.0, 10.0; 과같은문장을수행할경우계산되는투영변환행렬 M P 는 OpenGL에서규정한방식대로눈좌표계 EC 의점 x e,y e,z e 를정규디바이스좌표계 NDC 점 x nd,y nd,z nd 로변환을해준다. z nd 의경우 z nd = α + β z e 와같은형태의변환을사용하여유도할수있는데, 이때 α와 β 값이무엇인지상세히유도하라 위함수의인자값을사용하여문제를풀것. b y nd 를 x e, y e, z e 로표현하라 tan 45 = 1, tan 60 = 3= 1 tan 30.. c M P 행렬의두번째행과네번째행의내용을정확히기술하라 7. 시험지뒤에첨부한프로그램은적절한모델링변환을통하여자동차를그려주는 OpenGL 프로그램이다. 이프로그램을보면서답하라. a 이프로그램은그림 6에주어진자동차에대한트리구조를어떤한방식으로탐색을하고있는가? 자료구조시간에배운용어를사용할것. b 이프로그램에서원근나눗셈 perspective division 과가장관련이있는문장의번호는? c 이프로그램에서는사용자가어떠한방식으로자동차를앞으로움직이게할수있을까? 정확하게기술할것. d 세상좌표계 WC 를기준으로할때카메라가세상을바라보는방향을벡터로표현하라. e 눈좌표계 EC 를기준으로할때카메라가세상을바라보는방향을벡터로표현하라. f 59번의이동변환관련문장이수행되기직전의모델뷰행렬스택의내용을정확하게그려라. M V M P, M VP 와그림 6의행렬기호등을적절히사용하라. 현재 draw wheel and nutangle 함수는 100번문장에서호출한상태임. g 52번문장의 draw wheel and nutangle 함수에서이상한부분을지적하고수정하라. 이유를설명할것. h 83번문장의 void cross prod vec3float *u, float *v, float *n 함수는 3차원벡터에대한외적, 즉 n = u v을계산하기위한함수이다. 내용을메꾸어라. i 이프로그램에서사용하는인자들을사용하여정규디바이스좌표계 NDC 의좌표 x nd,y nd 를윈도우좌표계 WdC 의좌표 x wd,y wd 로어떻게변환시켜주는지뷰폿변환 x와 y 좌표에대해서만 을유도하라. j 이프로그램에서뷰매핑과가장관련이많은문장의번호를기술하라. k 이프로그램에서자동차를세상좌표계로배치해주는모델링변환이강체변환인지아닌지답하고그이유를간략히설명하라 년 4 월 25 일 토 오후 1:00 -

29 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 5/8 그림 2: OpenGL 파이프라인 z e EC y e y e z e, fovy/2 c y e a y' y * * z e -n -f d b M P y nd y nd, z nd c 1 a -1 1 NDC d -1 b z nd 그림 5: 투영변환 년 4 월 25 일 토 오후 1:00 -

30 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스중간고사 6/8 WC M b M w M w M w M w M M n0 M 1 n M 4 n0 M 1 n M 4 n n M n0 M 1 n M 4 n M n0 M 1 n M 4 n 그림 6: 자동차의계층적표현 년 4 월 25 일 토 오후 1:00 -

31 filename mvcar.cpp page 1 1 #include <stdio.h> 2 #include <math.h> 3 #include <GL/glut.h> #define MAX_POLY #define MAX_VERT 20 7 #define MAX_PATH #define DRAW_CAR_DUMMY #define DRAW_CAR_CORRECT typedef struct { 13 int nvertex; 14 float poly[max_vert][3]; 15 mypolygon; mypolygon body[max_poly], wheel[max_poly], nut[max_poly]; 18 int npolyb, npolyw, npolyn; float path[max_path][3]; 21 int npath, path_exist, drawing_state = DRAW_CAR_CORRECT; double dist; int prev_i, cur_i = 0; 26 int rightbuttonpressed = 0; void read_objectchar *file, mypolygon *object, int *npoly; 29 void read_pathchar *file; 30 void read_objectsvoid; 31 void draw_axesvoid; 32 void draw_pathvoid; 33 void draw_groundvoid; void draw_bodyvoid { 36 // Draw the body void draw_wheelfloat angle { 41 // Draw the wheel void draw_nutvoid { 46 // Draw the nut #define rad #define ww void draw_wheel_and_nutfloat angle { 53 int i; draw_wheelangle; // draw wheel object 56 for i = 0; i < 5; i++ { 57 // nut i 58 glpushmatrix; 59 gltranslatefrad-0.5, 0, ww; // rad = 1.7, ww = glrotatef72.0*i, 0.0, 0.0, 1.0; 61 draw_nut; // draw nut object 62 glpopmatrix; #define TO_DEG void normalize_vec3float *v { float dot_prod_vec3float *u, float *v { float compute_length_mul_two_vec3float *u, float *v { float angle_between_two_vec3float *u, float *v { void cross_prod_vec3float *u, float *v, float *n { 84 //??? float wheel_rot_angle_in_yvoid { float wheel_rot_angle_in_zvoid { void draw_car_dummyvoid { 97 draw_body; // draw body object 98 glpushmatrix; 99 gltranslatef-3.9, -3.5, 4.5; 100 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 104 gltranslatef3.9, -3.5, 4.5; 105 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 109 gltranslatef-3.9, -3.5, -4.5; 110 glscalef1.0, 1.0, -1.0; 111 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 115 gltranslatef3.9, -3.5, -4.5; 116 glscalef1.0, 1.0, -1.0; 117 draw_wheel_and_nut0.0; // wheel glpopmatrix; void set_up_rot_matfloat *m, int i { void draw_fenceglfloat r, GLfloat g, GLfloat b { HPSCAT 1.3 printed at 4/20/103, 23:01

32 filename mvcar.cpp page void draw_fencesvoid { void draw_world void { 134 GLfloat m[16]; glmatrixmodegl_modelview; // Modeling Transformation 137 glloadidentity; 138 glulookat-15.0, 20.0, 40.0, path[cur_i][0], 4.89, path[cur_i][2], 0.0, 1.0, 0.0; draw_ground; 141 draw_fences; 142 draw_axes; 143 if path_exist draw_path; set_up_rot_matm, cur_i; glpushmatrix; 148 gltranslatefpath[cur_i][0], 4.89, path[cur_i][2]; 149 glmultmatrixfm; draw_car_dummy; 152 glpopmatrix; void rendervoid { 156 glcleargl_color_buffer_bit; 157 draw_world; 158 glutswapbuffers; void keyboard unsigned char key, int x, int y { int prevx_mouse; 166 void mousepressint button, int state, int x, int y { 167 if button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN { 168 prevx_mouse = x; 169 rightbuttonpressed = 1; else if button == GLUT_RIGHT_BUTTON && state == GLUT_UP 172 rightbuttonpressed = 0; void mousemoveint x, int y { 176 double deltax; if rightbuttonpressed { 179 deltax = x - prevx_mouse; 180 prevx_mouse = x; 181 if cur_i + deltax > 0 && cur_i + deltax < npath-1 { 182 prev_i = cur_i; cur_i += deltax; 183 dist = sqrtpath[cur_i][0]-path[prev_i][0]*path[cur_i][0]-path[prev_i][ 0] path[cur_i][1]-path[prev_i][1]*path[cur_i][1]-path[prev_i][1] path[cur_i][2]-path[prev_i][2]*path[cur_i][2]-path[prev_i][2] ; 186 if deltax < 0.0 dist *= -1.0; 187 glutpostredisplay; void reshapeint width, int height { 193 glviewport0, 0, width, height; glmatrixmodegl_projection; 196 glloadidentity; 197 gluperspective30.0, width/double height, 1.0, 150.0; void init_openglvoid { void init_windowsvoid { 205 glutinitdisplaymodeglut_rgb GLUT_DOUBLE; 206 glutinitwindowsize1280, 1024; 207 glutcreatewindow"car in Hierarchy 2"; 208 glutdisplayfuncrender; 209 glutkeyboardfunckeyboard; 210 glutmousefuncmousepress; 211 glutmotionfuncmousemove; 212 glutreshapefuncreshape; void mainint argc, char **argv { 216 read_objects; 217 glutinit&argc, argv; 218 init_windows; 219 init_opengl; 220 glutmainloop ; HPSCAT 1.3 printed at 4/20/103, 23:01

33 CSE4170 כ 1/6 [CSE4170: ] : כ. כ כ OC, CC, EC, MC, NDC, WC, WdC OpenGL. a 3.0, 6.0, 9.0, x, y, z? b M. c R S? d,? e OpenGL glvertex3f? f OpenGL NDC M 2,, כ. 1: OpenGL glorthol,r,b,t,n,f,, [ 1, 1] [ 1, 1] [ 1, 1] M ortho OpenGL כ כ. α, β, γ כ כ כ. 2 r l 0 0 α 2 0 M ortho = t b 0 β f n γ z e l, b, 0 y e 0 x e r, t, 0 2: glortho 2 -n 1 -f :45 -

34 CSE4170 כ 2/6 4. normal vector n 4 4 M כ. 3. n p ØŒ M p p' 0 p' 0 3: a n =M 1 t n. 3 p = xyz1 t n =n x n y n z 0 t. p p 0 =x 0 y 0 z 0 1 t n t p 0 p =0. p, p 0, n M p = x y z 1 t, p 0 = x 0 y 0 z 0 1t, n =n x n y n z 0 t, p = M p p 0 = M p 0 p p 0. b n., M, M = a 11 a 12 a 13 v 1 a 21 a 22 a 23 v 2 a 31 a 32 a 33 v n', v 1, v 2, v 3 כ כ? c a 1, a 2, a 3,. d b, M M 1 t. b כ. 5.. a 4 OpenGL gluperspectivefovy, aspec, n, f x e,y e,z e EC NDC x nd,y nd,z nd. z nd z nd = α + β z e, α β כ כ כ. b x y x nd = cot fovy cot fovy 2 x asp e z e y 2 y nd = e z e, M pers a,, x, y, z. y 90, x, y, z -3.0, 0.5, 2.5,. 5b m x, y, z x0, y0, z0. 5c OpenGL API. A B C OpenGL API minv m. glmatrixmodegl MODELVIEW; glloadidentity; A glmultmatrixfminv; B :45 -

35 CSE4170 כ 3/6 z e EC y e y e z e, fovy/2 c y e a y' y * * z e -n d -f b M P y nd y nd, z nd c 1 a -1 1 NDC d -1 b z nd 4: a 1 u = u x u y u z t, v = v x v y v z t, n = n x n y n z t p =e x e y e z t., x, y, z 4 4 M V R T R T. b a, b, c LEGS, ARM, CAR. d c angle = r angle = 0.0, 16 ARM., A C. c r angle? d M V. e glulookat. f e d. B C, e. void draw world { int i; draw axes; glpushmatrix; draw floor; draw LEGS; // r angle = 0.0 glrotatefr angle,0,0,1; fori = 0; i < 16; i++ { glpushmatrix; glrotatefa, 0.0, 0.0, 1.0; draw ARM; glpushmatrix; gltranslatef0.0, 6.0, 0.0; // B glrotatefr angle, 0.0, 0.0, 1.0; glrotatef-22.5*i,0.0, 0.0, 1.0; // C glscalef0.12, 0.12, 0.12; draw CAR; glpopmatrix; glpopmatrix; glpopmatrix; void render3void { glcleargl COLOR BUFFER BIT; glmatrixmodegl MODELVIEW; glloadidentity; // c angle = glrotatefc angle, 0.0, 1.0, 0.0; gltranslatef-25.0, 1.0, -25.0; draw world; glutswapbuffers; :45 -

36 CSE4170 כ 4/6 a MC b c 5: 8. OpenGL. 7, OC, CC, EC, MC, NDC, WC, WdC. a, OpenGL box. b, OpenGL, box. c OpenGL GL CCW box. d G box H box OpenGL? e OpenGL NDC p y nd כ? f OpenGL, box. g, glortho, box. h x, y, z, w w 1 כ box :45 -

37 CSE4170 כ 5/6 a LEGS in MC b ARM in MC c CAR in MC d e 6: :45 -

38 CSE4170 כ 6/6 A B C D E F F G G E E F G H I J K 7: OpenGL :45 -

39 /7 [43-170: ] : כ. כ.. 1. normal vector n 4 4 M כ. 1. n p ØŒ M p p' 0 p' 0 1: a n =M 1 t n. 1 p = xyz1 t n =n x n y n z 0 t. p p 0 =x 0 y 0 z 0 1 t n t p 0 p =0. p, p 0, n M p = x y z 1 t, p 0 = x 0 y 0 z 0 1t, n =n x n y n z 0 t, p = M p p 0 = M p 0 p p 0. b n., M n', M = a 11 a 12 a 13 v 1 a 21 a 22 a 23 v 2 a 31 a 32 a 33 v , v 1, v 2, v 3 כ כ? c a 1, a 2, a 3,. d b, M M 1 t. b כ a OpenGL API gluperspectivefovy, asp, n, f x e,y e,z e EC NDC x nd,y nd,z nd, y nd x e, y e, z e. כ. b z nd z nd = α + β z e. α β כ. 3. OpenGL API 2 2D viewing. 3a p = 50, 50 50, 10 p y. a :00 -

40 /7 z e EC y e y e z e, fovy/2 c y e a y' y * * z e -n d -f b M P y nd y nd, z nd c 1 a -1 1 NDC d -1 b z nd 2: a b 3:, A,,, OpenGL API. b p b, B,, OpenGL API. c, B. glortho-50.0, 50.0, -50.0, 50.0, -1.0, 1.0; d A B. glmatrixmodegl MODELVIEW;,?? e 4 4 M VP 0 1 0, כ a 10, 0, 0,,, 0, 0, 1, 0, 1, 0, 1, 0, 0.,, OpenGL API. b glulookat * :00 -

41 /7 void draw boxvoid { glbegingl QUADS; glvertex2f0.5, 0.5; glvertex2f-0.5, 0.5; glvertex2f-0.5, -0.5; glvertex2f0.5, -0.5; glend; void draw crossvoid { glbegingl LINES; glvertex2f-0.5, 0.0; glvertex2f0.5, 0.0; glvertex2f0.0, -0.5; glvertex2f0.0, 0.5; glend; void displayvoid { int i; glcleargl COLOR BUFFER BIT; glviewport0, 0, 500, 500; glmatrixmodegl PROJECTION; glloadidentity; B glmatrixmodegl MODELVIEW; glloadidentity; for i = 3; i < 8; i++ { glpushmatrix; A draw box; glpopmatrix; glpushmatrix; gltranslatef50.0, 50.0, 0.0; glscalef50.0, 50.0, 1.0; draw cross; glpopmatrix; glflush; 4: OpenGL c 6 glulookat*., כ z[0], z[1], z[2]. d. 5. OpenGL.. a 7,? b OpenGL view mapping, OC, EC, NDC, WdC, CC, MC, WC. c. d, CC כ 1. e WC. f MS WM PAINT כ? g. h. i 59. M V M P, M VP 7. draw wheel and nutangle :00 -

42 /7 j 52 draw wheel and nutangle. כ. k. z angle z 7? l. כ. כ f, W כ 1 כ? g pixel shader? A D B C E 5: NVIDIA GeForce 6 Series GPU 6. 5 NVIDIA GeForce 6 Series GPU. A, B, C, D, E. a? b? c depth buffer? d? e? :00 -

43 /7 void glulookat GLdouble ax, GLdouble ay, GLdouble az, GLdouble bx, GLdouble by, GLdouble bz, GLdouble cx, GLdouble cy, GLdouble cz { GLdouble m[16]; GLdouble x[3], y[3], z[3]; GLdouble mag; z[0] = ax - bx; z[1] = ay - by; z[2] = az - bz; mag = sqrt z[0]*z[0] + z[1]*z[1] + z[2]*z[2] ; if mag { z[0] /= mag; z[1] /= mag; z[2] /= mag; y[0] = cx; y[1] = cy; y[2] = cz; x[0] = y[1]*z[2] - y[2]*z[1]; x[1] = -y[0]*z[2] + y[2]*z[0]; x[2] = y[0]*z[1] - y[1]*z[0]; y[0] = z[1]*x[2] - z[2]*x[1]; y[1] = -z[0]*x[2] + z[2]*x[0]; y[2] = z[0]*x[1] - z[1]*x[0]; mag = sqrt x[0]*x[0] + x[1]*x[1] + x[2]*x[2] ; if mag { x[0] /= mag; x[1] /= mag; x[2] /= mag; mag = sqrt y[0]*y[0] + y[1]*y[1] + y[2]*y[2] ; if mag { y[0] /= mag; y[1] /= mag; y[2] /= mag; #define Mrow,col m[row*4+col] M0,0 = x[0]; M0,1 = x[1]; M0,2 = x[2]; M0,3 = 0.0; M1,0 = y[0]; M1,1 = y[1]; M1,2 = y[2]; M1,3 = 0.0; M2,0 = z[0]; M2,1 = z[1]; M2,2 = z[2]; M2,3 = 0.0; M3,0 = 0.0; M3,1 = 0.0; M3,2 = 0.0; M3,3 = 1.0; #undef M glmultmatrixd m ; gltranslated -ax, -ay, -az ; 6: glulookat* WC M b 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 : :00 -

44 filename mvcar.cpp page 1 1 #include <stdio.h> 2 #include <math.h> 3 #include <GL/glut.h> #define MAX_POLY #define MAX_VERT 20 7 #define MAX_PATH #define DRAW_CAR_DUMMY #define DRAW_CAR_CORRECT typedef struct { 13 int nvertex; 14 float poly[max_vert][3]; 15 mypolygon; mypolygon body[max_poly], wheel[max_poly], nut[max_poly]; 18 int npolyb, npolyw, npolyn; float path[max_path][3]; 21 int npath, path_exist, drawing_state = DRAW_CAR_CORRECT; double dist; int prev_i, cur_i = 0; 26 int rightbuttonpressed = 0; void read_objectchar *file, mypolygon *object, int *npoly; 29 void read_pathchar *file; 30 void read_objectsvoid; 31 void draw_axesvoid; 32 void draw_pathvoid; 33 void draw_groundvoid; void draw_bodyvoid { 36 // Draw the body void draw_wheelfloat angle { 41 // Draw the wheel void draw_nutvoid { 46 // Draw the nut #define rad #define ww void draw_wheel_and_nutfloat angle { 53 int i; draw_wheelangle; // draw wheel object 56 for i = 0; i < 5; i++ { 57 // nut i 58 glpushmatrix; 59 gltranslatefrad-0.5, 0, ww; // rad = 1.7, ww = glrotatef72.0*i, 0.0, 0.0, 1.0; 61 draw_nut; // draw nut object 62 glpopmatrix; #define TO_DEG void normalize_vec3float *v { float dot_prod_vec3float *u, float *v { float compute_length_mul_two_vec3float *u, float *v { float angle_between_two_vec3float *u, float *v { void cross_prod_vec3float *u, float *v, float *n { 84 //??? float wheel_rot_angle_in_yvoid { float wheel_rot_angle_in_zvoid { void draw_car_dummyvoid { 97 draw_body; // draw body object 98 glpushmatrix; 99 gltranslatef-3.9, -3.5, 4.5; 100 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 104 gltranslatef3.9, -3.5, 4.5; 105 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 109 gltranslatef-3.9, -3.5, -4.5; 110 glscalef1.0, 1.0, -1.0; 111 draw_wheel_and_nut0.0; // wheel glpopmatrix; glpushmatrix; 115 gltranslatef3.9, -3.5, -4.5; 116 glscalef1.0, 1.0, -1.0; 117 draw_wheel_and_nut0.0; // wheel glpopmatrix; void set_up_rot_matfloat *m, int i { void draw_fenceglfloat r, GLfloat g, GLfloat b { HPSCAT 1.3 printed at 4/20/103, 23:01

45 filename mvcar.cpp page void draw_fencesvoid { void draw_world void { 134 GLfloat m[16]; glmatrixmodegl_modelview; // Modeling Transformation 137 glloadidentity; 138 glulookat-15.0, 20.0, 40.0, path[cur_i][0], 4.89, path[cur_i][2], 0.0, 1.0, 0.0; draw_ground; 141 draw_fences; 142 draw_axes; 143 if path_exist draw_path; set_up_rot_matm, cur_i; glpushmatrix; 148 gltranslatefpath[cur_i][0], 4.89, path[cur_i][2]; 149 glmultmatrixfm; draw_car_dummy; 152 glpopmatrix; void rendervoid { 156 glcleargl_color_buffer_bit; 157 draw_world; 158 glutswapbuffers; void keyboard unsigned char key, int x, int y { int prevx_mouse; 166 void mousepressint button, int state, int x, int y { 167 if button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN { 168 prevx_mouse = x; 169 rightbuttonpressed = 1; else if button == GLUT_RIGHT_BUTTON && state == GLUT_UP 172 rightbuttonpressed = 0; void mousemoveint x, int y { 176 double deltax; if rightbuttonpressed { 179 deltax = x - prevx_mouse; 180 prevx_mouse = x; 181 if cur_i + deltax > 0 && cur_i + deltax < npath-1 { 182 prev_i = cur_i; cur_i += deltax; 183 dist = sqrtpath[cur_i][0]-path[prev_i][0]*path[cur_i][0]-path[prev_i][ 0] path[cur_i][1]-path[prev_i][1]*path[cur_i][1]-path[prev_i][1] path[cur_i][2]-path[prev_i][2]*path[cur_i][2]-path[prev_i][2] ; 186 if deltax < 0.0 dist *= -1.0; 187 glutpostredisplay; void reshapeint width, int height { 193 glviewport0, 0, width, height; glmatrixmodegl_projection; 196 glloadidentity; 197 gluperspective30.0, width/double height, 1.0, 150.0; void init_openglvoid { void init_windowsvoid { 205 glutinitdisplaymodeglut_rgb GLUT_DOUBLE; 206 glutinitwindowsize1280, 1024; 207 glutcreatewindow"car in Hierarchy 2"; 208 glutdisplayfuncrender; 209 glutkeyboardfunckeyboard; 210 glutmousefuncmousepress; 211 glutmotionfuncmousemove; 212 glutreshapefuncreshape; void mainint argc, char **argv { 216 read_objects; 217 glutinit&argc, argv; 218 init_windows; 219 init_opengl; 220 glutmainloop ; HPSCAT 1.3 printed at 4/20/103, 23:01

46 / : : : : כ. כ.. p q α L r q' p' M,. n 0, 0, 0 p' n q q' α q p 1 x 6 y 3: 1 y M 1: 2. 2 MC 2 WC. WC e =e x e y 1 u =u x u y v =v x v y, כ 3 3 M 3 3,. כ y m MC x m M y w 1 WC e xm 2: 2 5 v u x w x ym n = n x n y n z t L p =xyz t α p =x y z t. L, L r, r p p q q. a q q n, α. b p p = A +p n p ncosα+ n psinα, A. c p p. n psinα {sin α Sp 3 3 S p, S. 4.. a e =ex ey ez t 1 u =ux uy uz t, v =vx vy vz t, n =nx ny nz t :00 -

47 /4 u v, n. M V 4 4, 16 כ. b OpenGL., 1 m1[16] m1[0], m1[1], m2[2],, m1[15]. GLfloat m1[16], m2[16];. glmatrixmodegl MODELVIEW; glloadidentity; glmultmatrixfm1; glmultmatrixfm2; c כ, a0, a1, a2,, a5 כ. GLfloat m1[16], m2[16];. glmatrixmodegl MODELVIEW; glloadidentity; glulookatex, ey, ez, a0, a1, a2, a3, a4, a5; 5. 4 Pixar RenderMan API. כ. a? b? c, OpenGL? d OpenGL glulookat*? 6. OpenGL. CC, EC, MC, NDC, WC, WdC. a 5 A OpenGL? b 5 B OpenGL? c 5 C OpenGL? d OpenGL? e? f OpenGL NDC p z כ? a A, B, C, D... b 7. c B,? d,. e B C M M i M 1 i M i M 1 i i כ :00 -

48 /4 01 void mainvoid { RtFloat fov = 45, intensity1 = 0.08, intensity2 = 0.8;. 02 RtColor opacity1 = {0.3, 0.3, 0.3; 03 char *txtname = "redchecker"; 04 RiBeginRI NULL; 05 RiFormat480, 360, 1; 06 RiPixelSamples2, 2; 07 RiFrameBegin1; 08 RiDisplay"3spheres.tif", "file", "rgba", RI NULL; 09 RiProjection"perspective", "fov", &fov, RI NULL; 10 RiRotate-110.0, 1, 0, 0; 11 RiTranslate0.0, -2.0, 8.0; 12 RiWorldBegin; 13 RiLightSource"ambientlight", "intensity", &intensity1, RI NULL;. 14 RiAttributeBegin; 15 RiTranslate-2.25, 0.0, 2.0; 16 RiColorsphcolor1;. 17 RiSphere1.0, -1.0, 1.0, 360.0, RI NULL; 18 RiAttributeEnd; 19 RiAttributeBegin; 20 RiTranslate0.0, 0.0, 2.0; 21 RiColorsphcolor2; 22 RiShadingRate0.25; 23 RiShadingInterpolation"constant"; 24 RiSurface"screen", "Ka", &Ka2, "Kd", &Kd2; 25 RiSphere1.0, -1.0, 1.0, 360.0, RI NULL; 26 RiAttributeEnd; 27 RiWorldEnd; 28 RiFrameEnd; 29 RiEnd; 30 4: RenderMan :00 -

49 /4 5: OpenGL 01 glpushmatrix; 02 glrotatefangle, 0.0, 1.0, 0.0; 03 gltranslatef0.0, 0.0, 5.0; 04 glscalef6.5, 6.5, 6.5; 05 draw cow; // draw object A 06 glpushmatrix; 07 glrotatef10.0*angle, 1.0, 0.0, 0.0; 08 gltranslatef-0.1, 0.0, 0.3; 09 glscalef0.025, 0.025, 0.025; 10 draw box; // draw object C 11 glpushmatrix; 12 glrotatef40.0*angle, 1.0, 0.0, 0.0; 13 gltranslatef0.0, 4.0, 0.0; 14 glscalef0.4, 0.4, 0.4; 15 draw box; // draw object D 16 glpopmatrix; 17 glpopmatrix; 18 gltranslatef0.15, 0.3, 0.0; 19 glscalef0.3, 0.3, 0.3; 20 draw cow; // draw object B 21 glpopmatrix; 6: :00 -

50 / : : : כ. כ.. 1. Win32 event message ID כ. a OpenGL pixel format b glutpostredisplay c 2. M M 2 = a 3 p 0, p 1, p 2 p 0 p 2 : p 0 p 1 =3:1. p 0, p 1, p 2 M 2 p 0 p 2 : p 0 p 1? b M 2?. c M 2. d OpenGL CC, EC, MC, NDC, WC, WdC, M 2? 3. 1 p =xyz1 t p = x y z 1 t 4 4 M 3. y z x COP = 0, -1, 0 d PP : y = d 1: 4. 2 Frame 1 Frame 2 u =u x u y u z t, v = v x v y v z t, n = n x n y n z t u = u x u y u z t, v = v x v y v z t, n = n x n y n z t. Frame 1 Frame M 4 M 4 = R 1 R R 1 R 2. M u, v, n, u, v, n. 5. OpenGL. CC, EC, MC, NDC, WC, WdC. a 3 [ 1, 1] [ 1, 1] [ 1, 1]? b? p' p :00 -

51 /5 Frame 2 u' z n v' y p v M 4 n' p' u Frame 1 2: c? d OpenGL? e? f,? g Fixed-function pipeline OpenGL Gouraud? h OpenGL vertex shader. line a? struct output { float4 position: POSITION; float4 p: TEXCOORD0; float3 n: TEXCOORD1; ; output main float4 position: POSITION, float4 normal: NORMAL, uniform float4x4 ModelViewProj, uniform float4x4 ModelView, uniform float4x4 ModelViewIT { x output OUT; OUT.position= mulmodelviewproj, position; // line a OUT.p = mulmodelview, position; OUT.n = mulmodelviewit, normal.xyz; return OUT; i,? j,? k MS Direct3D? D3DXMATRIX out; D3DXVECTOR3 eye2, 3, 3; D3DXVECTOR3 at2, 3, 3; D3DXVECTOR3 up2, 3, 3; D3DXMatrixLookAtLH&out, &eye, &at, &up; 6. 3 OpenGL glortho*. M 6, α, β, γ כ כ. 2 r l M 6 = t b f n α β γ OpenGL. typedef struct scene { int nobject; char *fname[256]; Object *objects; int nlight; Light *lights; Scene; :00 -

52 /5 #undef M y e f 3 printf"[field of Veiw in y]: scanf"%f", &cam->fovy;. \n"; ze l, b, 0 x e r, t, 0 3: glorthol, r, b, t, n, f typedef struct cam { float pos[3]; float uaxis[3], vaxis[3], naxis[3]; GLfloat mat[16]; A GLfloat mat inv[16]; int move, upanddown; GLdouble fovy, aspect, near c, far c; Camera; -n void draw axis void { glbegingl LINES; glcolor3f1.0, 0.0, 0.0; glvertex3f-5.0, 0.0, 0.0; glvertex3f5.0, 0.0, 0.0; glcolor3f0.0, 1.0, 0.0; glvertex3f0.0, -5.0, 0.0; glvertex3f0.0, 5.0, 0.0; glcolor3f0.0, 0.0, 1.0; glvertex3f0.0, 0.0, -5.0; glvertex3f0.0, 0.0, 5.0; glend; void reset cameracamera *cam { float prp[3], vrp[3], vup[3]; float x[3], y[3], z[3], mag; printf"[proj. Ref. Pt.]: \n"; scanf"%f %f %f", prp, prp+1, prp+2; printf"[view Ref. Pt.]: \n"; scanf"%f %f %f", vrp, vrp+1, vrp+2; printf"[view-up Vec.]: \n"; scanf"%f %f %f", vup, vup+1, vup+2;. B cam->pos[0] = prp[0]; cam->pos[1] = prp[1]; cam->pos[2] = prp[2]; cam->uaxis[0] = x[0]; cam->uaxis[1] = x[1]; cam->uaxis[2] = x[2]; cam->vaxis[0] = y[0]; cam->vaxis[1] = y[1]; cam->vaxis[2] = y[2]; cam->naxis[0] = z[0]; cam->naxis[1] = z[1]; cam->naxis[2] = z[2]; #define Mrow,col cam->mat[ C ] M0,0 = x[0]; M0,1 = x[1]; M0,2 = x[2]; M0,3 = 0.0; M1,0 = y[0]; M1,1 = y[1]; M1,2 = y[2]; M1,3 = 0.0; M2,0 = z[0]; M2,1 = z[1]; M2,2 = z[2]; M2,3 = 0.0; M3,0 = 0.0; M3,1 = 0.0; M3,2 = 0.0; M3,3 = 1.0; void cam object to ECScene *scene { glpushmatrix; gltranslatef D ; draw object&scene->objects[6]; glpopmatrix; void cam object to therescene *scene, Camera *cam { glpushmatrix; gltranslatefcam->pos[x], cam->pos[y], cam->pos[z]; glmultmatrixfcam->mat inv; cam object to ECscene; glpopmatrix; void draw scenescene *scene, Camera *cam { int i, j; glviewport530, 0, 750, 750; glmatrixmodegl PROJECTION; glloadidentity; gluperspectivecam->fovy, cam->aspect, cam->near c, cam->far c; glmatrixmodegl MODELVIEW; glloadidentity; glmultmatrixfcam->mat; gltranslatef-cam->pos[x], -cam->pos[y], :00 -

53 /5 draw axis; -cam->pos[z]; for i = 0; i < scene->nobject; i++ { glpushmatrix; glmultmatrixfglfloat * &scene->objects[i].xform; draw object&scene->objects[i]; glpopmatrix; a A mat, mat inv? mat = b reset camera* Camera. B EC. prp = 10, 5, 5, vrp = 13, 5, 9, vup = 0, 1, 0 B, z[0], z[1], z[2] כ כ? c, x[0], x[1], x[2] כ כ? d C C. e draw axis* glvertex3f*. draw scene* draw axis; CC, EC, MC, NDC, WC, WdC OpenGL כ? f draw scene* glviewport530, 0, 750, 750; glmatrixmodegl MODELVIEW;? g 6 scene->object[6] 3, 4, 10 ENG כ. cam object to EC*, D C. h cam object to ECscene; draw scene* כ? i cam object to therescene, cam; draw scene* draw axis;. cam object to there* cam object to ECscene; OpenGL 4 4? j g-h כ. cam object to there*; glpushmatrix; glpopmatrix;?. 8. Direct3D. protected void Render { float angle = Environment.TickCount /500.0F; device.clearclearflags.target, Color.Bisque, 1.0F, 0; device.beginscene; device.transform.world = Matrix.RotationYangle; device.transform.view = Matrix.LookAtLHnew Vector30, 0.5F, -3, new Vector30, 0.5F, :00 -

54 /5 0, new Vector30, 1, 0; device.transform.projection = Matrix.PerspectiveFovLHfloat Math.PI/4.0F, 1.0F, 1.0F, 5.0F; device.setstreamsource0, vertices, 0; device.drawprimitives PrimitiveType.TriangleList, 0, 1; device.endscene; device.present; a? b OpenGL x, y, z w? c OpenGL. d MC WC? e OpenGL glvertex3f*? f? 3 כ :00 -

55 / : : : : כ. כ a Win32 message ID. A This message is sent when the window is first produced, and gives you a chance to do any setup, initialization, or resource allocation. B This message is sent whenever your window s contents need repainting. This can occur for a number of reasons: the window was moved or resized by the user, another application popped up and obscured yours, and so on. C This message is sent to your window when the window is about to be killed. Usually, this is a direct result of the user clicking on the window s close icon or closing from the window s system menu. Either way, b complementary color? RGB כ כ. A pair of colors which can be additively combined to produce white light are called complementary colors, because together they complete the spectrum. c. The vectors v i are if α 1 v 1 + α 2 v α m v m = 0 for constants α i only if v 1 = v 2 = = v m = 0. d 3 1, 0, 3, 2. e 4 4? f glscalefx, y, z /,,? כ, +/-=, *=, /=. g R S. כ? h 3? 4 4. i?. j / /? A, B, C. D. k OpenGL? l OpenGL? m OpenGL? :00 -

56 /4 2.. int angle e = 0, angle r = 0, angle l = 0;. void keyboardunsigned char key, int x, int y { switch key { case e : angle e = angle e + 1%360; glutpostredisplay; break; case r : angle r = angle r + 1%360; glutpostredisplay; break; case l : angle l = angle l + 1%360; glutpostredisplay; break; case m :. void draw boxvoid { glbegingl POLYGON; glvertex2f0.5, 0.5; glvertex2f0.5, -0.5; glvertex2f-0.5, -0.5; glvertex2f-0.5, 0.5; glend; void practice modevoid { glpushmatrix; gltranslatef250.0, 250.0, 0.0; glscalef100.0, 100.0, 1.0; glrotatefangle e, 0.0, 0.0, 1.0; glpushmatrix; /* A */ glscalef1.0, 0.1, 1.0; glcolor3f0.0, 1.0, 0.0; draw box glpopmatrix; glpushmatrix; gltranslatef-0.5, 0.0, 0.0; glrotatefangle l, 0.0, 0.0, 1.0; gltranslatef-0.2, 0.0, 0.0; glscalef0.5, 0.15, 1.0; glcolor3f1.0, 0.0, 0.0; draw box; glpopmatrix; glpushmatrix; /* B */ gltranslatef0.5, 0.0, 0.0; glrotatefangle r, 0.0, 0.0, 1.0; gltranslatef0.2, 0.0, 0.0; glscalef0.5, 0.15, 1.0; glcolor3f0.0, 0.0, 1.0; draw box; glpopmatrix; /* C */ glpopmatrix; practice mode practice. angle e, angle r, angle l 0 keyboard כ MS,.. a. b l r 45, e 90. c practice mode A. d B C :00 -

57 / a 1 u = u x u y u z t, v = v x v y v z t, n = n x n y n z t p = e x e y e z t. x, y, z 4 4 M V. b R T R T.. c. glmatrixmodegl MODELVIEW; glloadidentity; glrotatef90.0, 1.0, 0.0, 0.0; gltranslatef-10.0, 0.0, 0.0; glulookat 9. כ , 1, 1 6, 6, 11 1, 1, 1 1, 1, M ortho. 1 z PEXlib 3 API. a PEXlib OpenGL? b OpenGL PEXlib. API. 6. Direct3D. protected void SetupMatrices { float angle = Environment.TickCount /500.0F; device.transform.world = Matrix.RotationYangle; device.transform.view = Matrix.LookAtLHnew Vector30, 0.5F, -3, new Vector30, 0.5F, 0, new Vector30, 1, 0; device.transform.projection = Matrix.PerspectiveFovLHfloat Math.PI/4.0F, 1.0F, 1.0F, 5.0F; protected void Render { device.clearclearflags.target, Color.Bisque, 1.0F, 0; device.beginscene; SetupMatrices; device.setstreamsource0, vertices, 0; device.drawprimitives PrimitiveType.TriangleList, 0, 1; device.endscene; device.present; a? b? c OpenGL. d? e OpenGL glvertex3f*? f? 2 3 כ :00 -

58 /4 $! "#" " 1: 2: PEXlib :00 -

0503중간고사.dvi

0503중간고사.dvi 서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 1/8 [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 담당교수: 임 인 성 답은 연습지가 아니라 답안지에 기술할 것 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의 변환을 위하여 사용 하는가? 답안지 공간이 부족할 경우, 답안지 뒷면에 기 술하고, 해당 답안지 칸에

More information

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

서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/8) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의 (/8) [CSE47: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것 있는 변환 행렬은 일반적으로 어떤 좌표계 에서 어떤 좌표계로의 변환을 위하여 사용 하는가? 답안지 공간이 부족할 경우, 답안지 뒷면에 기 술하고, 해당 답안지 칸에 그 사실을 명기할 것 (i) 투영 참조점이 무한대점 (point at infinit)

More information

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

서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/7) [CSE4170: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당 (/7) [CSE47: 기초 컴퓨터 그래픽스] 중간고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답 안지 공간이 부족할 경우, 답안지 뒷면에 기술 하고, 해당 답안지 칸에 그 사실을 명기할 것.. 2차원 아핀변환인 이동변환 T (t, t ), 크기변환 S(s, s ), 그리고 회전변환 R(θ)에 대한 3행 3열 행렬들을 고려하자.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 03 모델변환과시점변환 01 기하변환 02 계층구조 Modeling 03 Camera 시점변환 기하변환 (Geometric Transformation) 1. 이동 (Translation) 2. 회전 (Rotation) 3. 크기조절 (Scale) 4. 전단 (Shear) 5. 복합변환 6. 반사변환 7. 구조변형변환 2 기하변환 (Geometric Transformation)

More information

Microsoft Word - cg07-midterm.doc

Microsoft Word - cg07-midterm.doc 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오.

More information

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

서강대학교공과대학컴퓨터공학과 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 information

Microsoft Word - cg09-final-answer.doc

Microsoft Word - cg09-final-answer.doc 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 성적공고시중간고사때제출한암호를사용할것임. 1. 다음문제에답하시오. (50점) 1) 직교투영 (orthographic projection),

More information

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

단국대학교멀티미디어공학그래픽스프로그래밍중간고사 (2011 년봄학기 ) 2011 년 4 월 26 일학과학번이름 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. l 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오.

More information

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

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

More information

Microsoft PowerPoint - lecture11-ch4

Microsoft 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

Microsoft PowerPoint - lecture11-ch4.ppt

Microsoft 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 information

Microsoft PowerPoint - 13prac.pptx

Microsoft 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 information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

Open GL

Open 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 information

Microsoft Word - cg09-midterm.doc

Microsoft Word - cg09-midterm.doc 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오.

More information

Microsoft PowerPoint - lecture4-ch2.ppt

Microsoft 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 information

0503기말고사.dvi

0503기말고사.dvi 서강대학교 공과대학 컴퓨터공학과 CSE4170 기초 컴퓨터 그래픽스 중간고사 (1/6) [CSE4170: 기초 컴퓨터 그래픽스] 기말고사 (담당교수: 임 인 성) 답은 연습지가 아니라 답안지에 기술할 것. 답안지 공간이 부족할 경우, 답안지 뒷면에 기 술하고, 해당 답안지 칸에 그 사실을 명기할 것. 1. 다음은 OpenGL fixed-function 렌더링

More information

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

서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/10) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거 서강대학교공과대학컴퓨터공학과 CSE4170 기초컴퓨터그래픽스기말고사 (1/10) [CSE4170: 기초컴퓨터그래픽스 ] 기말고사 담당교수 : 임인성 답은연습지가아니라답안지에기술할것. 답안지공간이부족할경우, 답안지뒷면에기술하고, 해당답안지칸에그사실을명기할것. 연습지는수거하지않음. b 1 a c texel 4 e 3 2 d pixel preimage (a) 텍셀색깔의계산

More information

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

(Microsoft PowerPoint - CNVZNGWAIYSE.ppt [\310\243\310\257 \270\360\265\345]) Viewing Viewing Process first part : model-view in Chapter 4 second part : projection in Chapter 5 world frame glmatrimode(gl_modelveiw) glmatrimode(gl_projection) camera frame camera 방향 object frame 5.

More information

Structure 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, 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 information

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

Vector 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

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

Łø·ŸÕ=¤ ¬ ÇX±xÒ¸ 06 - Èpº– 1 그래픽스강의노트 06 - 조명 1 강영민 동명대학교 2015 년 2 학기 강영민 ( 동명대학교 ) 3D 그래픽스프로그래밍 2015 년 2 학기 1 / 25 음영 계산의 필요성 음영(陰影) 계산, 혹은 셰이딩(shading)은 어떤 물체의 표면에서 어두운 부분과 밝은 부분을 서로 다른 밝기로 그려내는 것 모든 면을 동일한 색으로 그리면 입체감이 없다. 2 /

More information

0503기말고사.dvi

0503기말고사.dvi 서강대학교공과대학컴퓨터공학과 [CSE4170] 기초컴퓨터그래픽스기말고사 (1/8) [CSE4170] 기초컴퓨터그래픽스 기말고사 담당교수 : 임인성 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. OpenGL 시스템의각좌표계에대한약어는다음과같으며, 답을기술할때필요할경우적절히약어를사용하라.

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_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

Microsoft Word - cg07-final.doc

Microsoft Word - cg07-final.doc 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 성적공고시중간고사때제출한암호를사용할것임. 1. 맞으면 true, 틀리면 false를적으시오. (20점) 1) 은면제거알고리즘중페인터알고리즘

More information

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

단국대학교멀티미디어공학그래픽스프로그래밍기말고사 (2012 년봄학기 ) 2012 년 6 월 12 일학과학번이름 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 l 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. l 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 다음은 oglclass 에서제공하는

More information

Microsoft Word - cg12-midterm-answer

Microsoft Word - cg12-midterm-answer 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임.. 맞으면 true, 틀리면 false를적으시오.

More information

Microsoft Word - cg08-final-answer.doc

Microsoft Word - cg08-final-answer.doc 기말고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 성적공고시중간고사때제출한암호를사용할것임. 1. 다음문제에답하시오. (50점) 1) 표면의법선벡터 (normal vector) N과표면에서광원으로향하는광원벡터

More information

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

(Microsoft PowerPoint - JXQEUPXIEBNZ.ppt [\310\243\310\257 \270\360\265\345]) Input and Interaction 3.1 Interaction Input 기능의처리 input : 사용자와의대화 O/S 와밀접한관계 문제점 : portability 에심각한장애 MS Windows 용으로작성하면, 거기서만작동 OpenGL approach OpenGL 은 portability 를중시 input 은 OpenGL 기능에서되도록제거 GLUT :

More information

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

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

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[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 information

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

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 알고리즘설계와분석 (CSE3081-2반 ) 중간고사 (2013년 10월24일 ( 목 ) 오전 10시30분 ) 담당교수 : 서강대학교컴퓨터공학과임인성수강학년 : 2학년문제 : 총 8쪽 12문제 ========================================= < 주의 > 답안지에답을쓴후제출할것. 만약공간이부족하면답안지의뒷면을이용하고반드시답을쓰는칸에답안지의어느쪽의뒷면에답을기술하였는지명시할것.

More information

<B4EBC7D0BCF6C7D02DBBEFB0A2C7D4BCF62E687770>

<B4EBC7D0BCF6C7D02DBBEFB0A2C7D4BCF62E687770> 삼각함수. 삼각함수의덧셈정리 삼각함수의덧셈정리 삼각함수 sin (α + β ), cos (α + β ), tan (α + β ) 등을 α 또는 β 의삼각함수로나 타낼수있다. 각 α 와각 β 에대하여 α >0, β >0이고 0 α - β < β 를만족한다고가정하 자. 다른경우에도같은방법으로증명할수있다. 각 α 와각 β 에대하여 θ = α - β 라고놓자. 위의그림에서원점에서거리가

More information

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

Microsoft PowerPoint - lecture11-ch5.ppt [호환 모드] Viewing Viewing 329 24 년봄학기 5//24 박경신 관측의기본요소 객체 (Objects) 관측자 (Viewer) 투영선 (Projector) 투영면 (Projection plane) 투영중심 (Center of Projection: COP) COP가유한한경우 투시관측 (Perspectie iews) COP가무한한경우 평행관측 (Parallel

More information

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

Microsoft 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 information

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

Microsoft 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

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

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 알고리즘설계와분석 (CSE3081(2 반 )) 기말고사 (2016년 12월15일 ( 목 ) 오전 9시40분 ~) 담당교수 : 서강대학교컴퓨터공학과임인성 < 주의 > 답안지에답을쓴후제출할것. 만약공간이부족하면답안지의뒷면을이용하고, 반드시답을쓰는칸에어느쪽의뒷면에답을기술하였는지명시할것. 연습지는수거하지않음. function MakeSet(x) { x.parent

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<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

Open GL

Open GL Graphics OpenGL 컴퓨터그래픽스연구실 GLUT 모델링 정 6 면체 void glutsolidcube(gldouble size); 물체겉면이칠해진형태 void glutwirecube(gldouble size); 물체뼈대만선으로표시 size : 정육면체모서리의길이 GLUT 모델링 원구 void glutsolidsphere(gldouble radius,

More information

歯Lecture2.PDF

歯Lecture2.PDF VISUAL C++/MFC Lecture 2? Update Visual C ++/MFC Graphic Library OpenGL? Frame OpenGL 3D Graphic library coding CLecture1View? OpenGL MFC coding Visual C++ Project Settings Link Tap Opengl32lib, Glu32lib,

More information

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

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

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

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

Microsoft PowerPoint - 06-Body Data Class.pptx

Microsoft 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 information

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

Python과 함께 배우는 신호 해석 제 5 강. 복소수 연산 및 Python을 이용한 복소수 연산      (제 2 장. 복소수 기초) 제 5 강. 복소수연산및 을이용한복소수연산 ( 제 2 장. 복소수기초 ) 한림대학교전자공학과 한림대학교 제 5 강. 복소수연산및 을이용한복소수연산 1 배울내용 복소수의기본개념복소수의표현오일러 (Euler) 공식복소수의대수연산 1의 N 승근 한림대학교 제 5 강. 복소수연산및 을이용한복소수연산 2 복소수의 4 칙연산 복소수의덧셈과뺄셈에는직각좌표계표현을사용하고,

More information

04_오픈지엘API.key

04_오픈지엘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 information

chapter2.hwp

chapter2.hwp 2. 그래픽스프로그래밍의소개 2.1 OpenGL 이란? 2.1.1 OpenGL 의정의 2차원또는 3차원드로잉을위한표준그래픽스라이브러리 - 그래픽스하드웨어에대한소프트웨어인터페이스 - C나 C++ 과같은프로그래밍언어는아님 - 그래픽스하드웨어에잘구현될수있음 -C언어기반라이브러리 - 상태기반아키텍쳐 - 즉시모드 (Immediate mode) 기반 그래픽스라이브러리

More information

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

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에대하여 AB=BA 1 가성립한다 2 3 (4) 이면 1 곱셈공식및변형공식성립 ± ± ( 복호동순 ), 2 지수법칙성립 (은자연수 ) < 거짓인명제 >

More information

chap 5: Trees

chap 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

K&R2 Reference Manual 번역본

K&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

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft 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 information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information

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

LIDAR와 영상 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 information

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

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

슬라이드 1

슬라이드 1 세모그래픽스 III. 게임프로그래밍에필요한 OpenGL Page 1 목차 1. 간단한 OBJ-C 2. IOS의 OGL VS Win32의 OGL 3. IOS개발환경설정 4. 뷰포트, 프로젝션, 모델뷰 ( 회전이먼저냐이동이먼저냐?) Page 2 세모그래픽스 간단한 OBJ-C 2011.07.16 김형석 Page 3 1. Obj-C (test2_cpp) #import

More information

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

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 경영학을 위한 수학 Fial Eam 5//(토) :-5: 풀이과정을 모두 명시하시오. 정리를 사용할 경우 명시하시오.. (각 6점) 다음 적분을 구하시오 4 ( ) (a) ( )4 8 8 (b) d이 성립한다. d C C log log (c) 이다. 양변에 적분을 취하면 log C (d) 라 하자. 그러면 d 4이다. 9 9 4 / si (e) cos si

More information

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

Microsoft PowerPoint 다변수 방정식과 함수(1).ppt 수치해석 () 다변수방정식과함수 (Part 1) (Multi-Variable Equations and Functions Part 1) 2005 년가을학기 문양세컴퓨터과학과강원대학교자연과학대학 In this chapter 다변수방정식과함수 변수가두개이상인함수, 예를들어, f ( x, y, z) = log( x+ y) + sin( x+ z) 의해 (f(x,y,z)=0

More information

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

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

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

C 언어 프로그래밊 과제 풀이 과제풀이 (1) 홀수 / 짝수판정 (1) /* 20094123 홍길동 20100324 */ /* even_or_odd.c */ /* 정수를입력받아홀수인지짝수인지판정하는프로그램 */ int number; printf(" 정수를입력하시오 => "); scanf("%d", &number); 확인 주석문 가필요한이유 printf 와 scanf 쌍

More information

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

문제지 제시문 2 보이지 않는 영역에 대한 정보를 얻기 위하여 관측된 다른 정보를 분석하여 역으로 미 관측 영역 에 대한 정보를 얻을 수 있다. 가령 주어진 영역에 장애물이 있는 경우 한 끝 점에서 출발하여 다른 끝 점에 도달하는 최단 경로의 개수를 분석하여 장애물의 제시문 문제지 2015학년도 대학 신입학생 수시모집 일반전형 면접 및 구술고사 수학 제시문 1 하나의 동전을 던질 때, 앞면이나 뒷면이 나온다. 번째 던지기 전까지 뒷면이 나온 횟수를 라 하자( ). 처음 던지기 전 가진 점수를 점이라 하고, 번째 던졌을 때, 동전의 뒷면이 나오면 가지고 있던 점수를 그대로 두고, 동전의 앞면이 나오면 가지고 있던 점수를 배

More information

슬라이드 1

슬라이드 1 프로세싱 광운대학교로봇학부박광현 프로세싱실행 2 C:\processing-3.2.1 폴더 창나타내기 실행 정지 3 폭 높이 600 400 도형그리기 배경칠하기 5 background(255, 255, 255); R G B background(255, 0, 0); background(255, 122, 0); 선그리기 6 background(255, 122, 0);

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

Microsoft PowerPoint - lecture15-ch6.ppt

Microsoft 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 information

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조 - Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

Microsoft Word - cg11-midterm-answer.doc

Microsoft Word - cg11-midterm-answer.doc 중간고사 담당교수 : 단국대학교멀티미디어공학전공박경신 답은반드시답안지에기술할것. 공간이부족할경우반드시답안지몇쪽의뒤에있다고명기한후기술할것. 그외의경우의답안지뒤쪽이나연습지에기술한내용은답안으로인정안함. 답에는반드시네모를쳐서확실히표시할것. 답안지에학과, 학번, 이름외에본인의암호를기입하면성적공고시학번대신암호를사용할것임. 1. 맞으면 true, 틀리면 flse를적으시오.

More information

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

A 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 information

untitled

untitled 자료형 기본자료형 : char, int, float, double 등 파생자료형 : 배열, 열거형, 구조체, 공용체 vs struct 구조체 _ 태그 _ 이름 자료형멤버 _ 이름 ; 자료형멤버 _ 이름 ;... ; struct student int number; // char name[10]; // double height; // ; // x값과 y값으로이루어지는화면의좌표

More information

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft 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

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

ch15

ch15 쉽게풀어쓴 C 언어 Express 제 14 장포인터활용 C Express 이중포인터 이중포인터 (double pointer) : 포인터를가리키는포인터 int i = 10; int *p = &i; int **q = &p; // i 는 int 형변수 // p 는 i 를가리키는포인터 // q 는포인터 p 를가리키는이중포인터 이중포인터 이중포인터의해석 이중포인터 //

More information

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 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 information

Microsoft PowerPoint - IP11.pptx

Microsoft 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

Microsoft PowerPoint - lecture16-ch6

Microsoft 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 information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft 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 information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

중간고사

중간고사 중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX

More information

<4D F736F F D20BECBB1E220BDACBFEE20BAA4C5CD2C20C1C2C7A5B0E82C20C1C2C7A5BAAFC8AFC7E0B7C4>

<4D F736F F D20BECBB1E220BDACBFEE20BAA4C5CD2C20C1C2C7A5B0E82C20C1C2C7A5BAAFC8AFC7E0B7C4> 벡터, 좌표계, 좌표값, 그리고좌표변환행렬 이형근한국항공대학교항공전자및정보통신공학부 제어및로봇응용에서다양한좌표계와이를기반으로한벡터의좌표값이활용되고있다. 이는운동을수반하는대다수의지능시스템에있어서시스템의현재위치및자세정보가미래의동작을결정하고제어하는데필수불가결한정보로인식되기때문이다. 다양한응용분야에활용되는중요성에도불구하고, 필자의경험에의하면, 벡터및좌표계관련사항들은입문자가처음접하는단계에서큰부담을느끼는부분으로이해된다.

More information

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

컴퓨터그래픽스 소프트웨어 Video & Image VIPLProcessing Lab. 2014-1 Myoung-Jin Kim, Ph.D. (webzealer@ssu.ac.kr) 목차 1 래스터그래픽스및벡터그래픽스 2 컴퓨터그래픽스소프트웨어의유형 3 OpenGL 프로그래밍 래스터그래픽스영상 래스터그래픽스영상이란? 래스터 : CRT 의래스터 주사 (raster scan) 방식에서사용된용어

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.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

미분기하학 II-16 복소평면의선형분수변환과쌍곡평면의등장사상 김영욱 (ÑñÁ) 강의양성덕 (zû ) 의강의록 Ø 'x! xxñ 2007 년 김영욱 (ÑñÁ) 강의양성덕 (zû ) 의강의록 (Ø 'x!) 미분기하 II 2007 년 1 / 26

미분기하학 II-16 복소평면의선형분수변환과쌍곡평면의등장사상 김영욱 (ÑñÁ) 강의양성덕 (zû ) 의강의록 Ø 'x! xxñ 2007 년 김영욱 (ÑñÁ) 강의양성덕 (zû ) 의강의록 (Ø 'x!) 미분기하 II 2007 년 1 / 26 미분기하학 II-16 복소평면의 김영욱 (ÑñÁ) 강의양성덕 (zû ) 의강의록 Ø 'x! xxñ 2007 년 김영욱 (ÑñÁ) 강의양성덕 (zû ) 의강의록 (Ø 'x!) 미분기하 II 2007 년 1 / 26 자, 이제 H 2 의등장사상에대해좀더자세히알아보자. Definition 선형분수변환이란다음형식의사상을뜻한다. Example f (z) = az +

More information

02장.배열과 클래스

02장.배열과 클래스 ---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :

More information

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

벡터(0.6)-----.hwp 만점을위한 수학전문가남언우 - 벡터 1강 _ 분점의위치벡터 2강 _ 벡터의일차결합 3강 _ 벡터의연산 4강 _ 내적의도형적의미 5강 _ 좌표를잡아라 6강 _ 내적의활용 7강 _ 공간도형의방정식 8강 _ 구의방정식 9강 _2014년수능최고난도문제 좌표공간에 orbi.kr 1 강 _ 분점의위치벡터 01. 1) 두점 A B 이있다. 평면 에있는점 P 에대하여 PA

More information

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB>

<4D F736F F F696E74202D20C1A63134C0E520C6F7C0CEC5CD5FC8B0BFEB> 쉽게풀어쓴 C 언어 Express 제 14 장포인터활용 이중포인터 이중포인터 (double pointer) : 포인터를가리키는포인터 int i = 10; int *p = &i; int **q = &p; // i 는 int 형변수 // p 는 i 를가리키는포인터 // q 는포인터 p 를가리키는이중포인터 이중포인터 이중포인터의해석 이중포인터 // 이중포인터프로그램

More information

1 1 장. 함수와극한 1.1 함수를표현하는네가지방법 1.2 수학적모형 : 필수함수의목록 1.3 기존함수로부터새로운함수구하기 1.4 접선문제와속도문제 1.5 함수의극한 1.6 극한법칙을이용한극한계산 1.7 극한의엄밀한정의 1.8 연속

1 1 장. 함수와극한 1.1 함수를표현하는네가지방법 1.2 수학적모형 : 필수함수의목록 1.3 기존함수로부터새로운함수구하기 1.4 접선문제와속도문제 1.5 함수의극한 1.6 극한법칙을이용한극한계산 1.7 극한의엄밀한정의 1.8 연속 1 1 장. 함수와극한 1.1 함수를표현하는네가지방법 1.2 수학적모형 : 필수함수의목록 1.3 기존함수로부터새로운함수구하기 1.4 접선문제와속도문제 1.5 함수의극한 1.6 극한법칙을이용한극한계산 1.7 극한의엄밀한정의 1.8 연속 2 1.1 함수를표현하는네가지방법 함수 f : D E 는집합 D 의각원소 x 에집합 E 에속하는단하나의원소 f(x) 를 대응시키는규칙이다.

More information

슬라이드 1

슬라이드 1 한국산업기술대학교 제 5 강스케일링및회전 이대현교수 학습안내 학습목표 3D 오브젝트의확대, 축소및회전방법을이해한다. 학습내용 3D 오브젝트의확대및축소 (Scaling) 3D 오브젝트의회전 (Rotation) 변홖공갂 (Transform Space) SceneNode 의크기변홖 (Scale) void setscale ( Real x, Real y, Real z)

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<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 information

Open GL

Open GL Graphics OpenGL 컴퓨터그래픽스연구실 OpenGL 관련참고사이트 OpenGL 공식사이트 http://www.opengl.org/ Khronos Group http://www.khronos.org/ Nehe Productions http://nehe.gamedev.net/ OpenGL 파일셋팅 압축을푼후다음경로로파일을복사 헤더파일 (glut.h) Microsoft

More information

<B1B9BEEE412E687770>

<B1B9BEEE412E687770> 201 학년도대학수학능력시험 6 월모의평가문제및정답 2016 학년도대학수학능력시험 6 월모의평가문제지 1 제 2 교시 5 지선다형 1. 두행렬 성분은? [2 점 ] 에대하여행렬 의 3. lim 의값은? [2점] 1 2 3 4 5 1 2 3 4 5 2. 의값은? [2점] 1 2 3 4 5 4. 공차가 인등차수열 에대하여 의값은? [3 점 ] 1 2 3 4 5

More information

Microsoft PowerPoint - chap-11.pptx

Microsoft PowerPoint - chap-11.pptx 쉽게풀어쓴 C 언어 Express 제 11 장포인터 컴퓨터프로그래밍기초 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 컴퓨터프로그래밍기초 2 포인터란? 포인터 (pointer): 주소를가지고있는변수 컴퓨터프로그래밍기초 3 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다.

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 CHAPTER 13. HTML5 위치정보와드래그앤드롭 SVG SVG(Scalable Vector Graphics) 는 XML- 기반의벡터이미지포맷 웹에서벡터 - 기반의그래픽을정의하는데사용 1999 년부터 W3C 에의하여표준 SVG 의장점 SVG 그래픽은확대되거나크기가변경되어도품질이손상되지않는다. SVG 파일에서모든요소와속성은애니메이션이가능하다. SVG 이미지는어떤텍스트에디터로도생성하고편집할수있다.

More information

Microsoft PowerPoint - 제11장 포인터(강의)

Microsoft PowerPoint - 제11장 포인터(강의) 쉽게풀어쓴 C 언어 Express 제 11 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 1003 1004 1005 영화관 1002 1006 1001 포인터 (pointer) 1007 메모리의구조

More information

Microsoft PowerPoint - ch02-1.ppt

Microsoft PowerPoint - ch02-1.ppt 2. Coodinte Sstems nd Tnsfomtion 20 20 2.2 Ctesin Coodintes (,, ) () (b) Figue 1.1 () Unit vectos,, nd, (b) components of long,, nd. 직각좌표계에서각변수 (,, ) 들의범위 < < < < < < (2.1) 직각좌표계에서임의의벡터 는,, 가그림 1.1 에서와같이,,

More information

4.1 힘의모멘트 스칼라공식 4.1 힘의모멘트 스칼라공식 모멘트크기 (resultant moment) 2

4.1 힘의모멘트 스칼라공식 4.1 힘의모멘트 스칼라공식 모멘트크기 (resultant moment) 2 Engineering Mechanics 정역학 (Statics) 4장힘계의합력 1 GeoPave Lab. 4.1 힘의모멘트 스칼라공식 1 4.1 힘의모멘트 스칼라공식 4.1 힘의모멘트 스칼라공식 모멘트크기 (resultant moment) 2 4.1 힘의모멘트 The moment does not always cause r otation. The actual

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o

More information

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

Microsoft PowerPoint - lecture11-ch5.ppt [호환 모드] Viewig Viewig 5478 7 년가을학기 //7 단국대학교박경신 관측의기본요소 객체 (Objects) 관측자 (Viewer) 투영선 (Projector) 투영면 (Projectio plae) 투영중심 (Ceter of Projectio: COP) COP가유한한경우 투시관측 (Perspectie iews) COP가무한한경우 평행관측 (Parallel iews)

More information

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft 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 information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Microsoft PowerPoint - lecture12-ch5.ppt

Microsoft PowerPoint - lecture12-ch5.ppt Viewig Viewig 329 28년봄학기 5/3/27 박경신 관측의기본요소 객체 (Objects) 관측자 (Viewer) 투영선 (Projector) 투영면 (Projectio plae) 투영중심 (Ceter of Projectio: COP) COP 가유한한경우 투시관측 (Perspectie iews) COP 가무한한경우 평행관측 (Parallel iews)

More information