학과 샘플강의

OpenGL - 총 12시간 45분 / 강의당평균 : 38분15초

알지오 2016. 10. 28. 09:07



OpenGL

전체 : 12시간 45분 / 강의당평균 : 38분15초

01 화면좌표와 뷰포트
viewport, ortho를 통한 화면좌표계를 알아보고 기본적인 그리기 함수들에 대한 실습
37분
책갈피 : [00:18] 오픈지엘 헤더파일 불러오기 / [00:38] 초기화 함수들 / [01:22] 윈도우 출력 함수 / [02:42] POLYGON 형식으로 사각형 그리기 / [03:12] Viewport / [04:26] Viewport 값 수정 후 확인 / [06:30] Viewport 함수를 설정하지 않은 경우 / [07:00] ortho / [08:09] matrixMode 함수 / [08:16] loadIdentity / [08:41] ortho 함수의 초기화면 / [09:26] ortho 값 수정 후 확인 / [10:58] 원래 뷰포트와 새 뷰포트 일치 시 왜곡 피하기 / [11:41] 결과 확인 / [12:20] 기본적인 그리기 함수 / [12:37] POLYGON / [14:09] LINES / [14:43] LINE STRIP / [15:11] LINE LOOP / [15:30] TRIANGLES / [16:03] 정점 다르게 설정하기 / [17:36] TRIANGLES STRIP / [18:47] TRIANGLE FAN / [20:18] QUADS / [20:37] 코드 가져오기 / [21:03] QUADS STRIP / [22:22] 실습 / [22:47] 화면 설정 바꾸기 / [23:18] ortho 함수 설정 변경 / [23:56] 코드 그리기 / [24:45] 라인 4등분 / [25:17] LetsDraw 함수 입력 / [26:00] 헤더파일 추가 / [26:52] 직선 그리기 / [28:07] 함수 불러오기 / [29:26] 삼각형 그리기 / [30:56] 사각형 그리기 / [31:32] 오각형 그리기 / [31:56] 결과 확인 / [32:37] srand / [33:13] 컬러값 랜덤으로 띄워주기 / [33:15] 구조체 호출 / [33:57] 지정해준 값 넣기 / [34:07] 결과 확인 / [34:37] 타이머 콜백 함수 응용 / [35:22] 타이머 함수 입력 / [36:36] 결과 확인

02 마우스와 키보드 콜백함수
마우스와 키보드 콜백함수를 이용한 사각형 튀기기 실습
31분
책갈피 : [00:00] 마우스 콜백 함수 / [00:24] 마우스 콜백 함수의 원형 / [01:21] 마우스를 클릭했을때 사각형 그리기 / [01:34] Mouse 함수 / [01:56] 마우스 콜백 함수에 적용하기 / [02:20] 그려질 사각형에 대한 변수 설정 / [02:48] 마우스 클릭이 발생했을때 / [03:14] 마우스 좌표값 설정 / [03:24] glutPostRedisplay / [03:43] 사각형 그리기 / [03:53] 결과 확인 / [04:18] 여러개의 사각형 그리기 / [04:44] 사각형 갯수 정하기 / [05:01] mcount 변수 생성 / [05:22] mcount 값 설정 / [05:53] for 문 생성 / [06:19] 결과 확인 / [06:47] 색깔있는 사각형 그리기 / [07:30] 결과 확인 / [07:50] 마우스 콜백 함수와 타이머 콜백 함수 응용 / [08:00] 움직이는 사각형 그리기 / [08:32] Timer 함수 생성 / [08:44] 콜백 함수 불러오기 / [08:57] speed 변수 생성 / [09:22] 사각형이 움직이는 코드 생성 / [09:56] glutPostRedisplay / [10:04] Timer 함수 불러오기 / [10:19] 결과 확인 / [10:28] if 문을 활용해서 제약 설정 / [10:49] 코드의 문제점 / [11:23] 각각 속도값 설정하기 / [11:43] 속도값을 배열로 설정 / [12:22] 결과 확인 / [12:48] 키보드 콜백 함수 / [13:03] 키보드 콜백 함수 원형 / [13:33] 이벤트 실행 함수 생성 / [13:58] 함수 작성 / [14:20] 사각형을 띄운 후 키보드를 이용해 상하좌우로 이동하기 / [14:37] 전역변수 선언 / [14:50] 컬러값 지정 후 사각형 그리기 / [15:14] 키 값을 가져와서 키 값이 눌러질때마다 수행되는 함수 작성 / [15:28] swicth case 문 / [15:56] break / [16:35] glutPostRedisplay / [16:54] 결과 확인 / [17:13] 윈도우 종료 기능(exit) / [17:41] 마우스 콜백 함수와 키보드 콜백 함수 응용 / [18:03] 속도 조절 / [18:15] 키보드 함수 생성 / [18:31] 키보드 콜백 함수 불러오기 / [18:50] 속도 값 설정하기 / [19:14] a값 속도 작성(if 문) / [19:46] z값 속도 작성(if 문) / [20:19] 결과 확인 / [20:48] 메뉴 골백 함수 / [21:00] 정수 값 변수 선언 / [21:18] 메뉴 콜백 함수 등록 / [22:02] glutAddMenuEntry / [22:35] 사각형 그리기 메뉴 / [23:03] 타이머 메뉴 / [23:16] 종료 메뉴 / [23:26] glutAttachMenu(오른쪽 마우스 버튼) / [24:07] if 문 작성 / [25;25] else if / [25:54] startTimer 설정 / [26:17] 결과 확인 / [26:52] 메뉴 안에 서브메뉴 넣기 / [27:10] 변수 설정 / [27:20] 서브메뉴 불러오기(glutCreateMenu) / [27:44] glutAddMenuEntry / [29:00] MenuFuntion 작성 / [29:45] 결과 확인

03 3D좌표 part1
2D좌표에서 3D좌표계로의 변환
36분
책갈피 : [00:09] 3d 좌표상의 open GL / [00:26] 좌표계 / [00:56] z축-3차원 공간의 좌표 / [01:23] 모델 변환 / [01:36] 뷰포트 변환 / [02:15] glMatrixMode 함수 / [03:04] GL_MODELVIEW / [03:23] glLoadIdentity 함수 / [03:53] glMatrixMode 한번 더 설정 / [04:44] glOrtho 함수 / [05:00] 가운데를 원점으로 하는 좌표계로 변환 / [05:15] 범위 설정 / [05:30] if문 / [07:15] z축 값 설정 / [07:26] else문 / [07:55] drawScene 함수 안에 3차원 객체 올리기 / [08:18] 3d 모델 코드 / [08:45] 6개의 면을 가진 정육면체 / [09:09] 모델링 변환 / [09:24] 이동-glTranslatef / [09:52] 회전-glRotatef / [11:01] 확대/축소-glScalef / [11:31] 정육면체 확인 / [12:18] 3d객체 확인 / [12:50] 행렬스택 / [13:35] 함수 원형 / [13:48] glPushMatrix 함수 / [14:22] glPopMatrix 함수 / [15:31] 확인 / [16:26] 다른 객체 확인 / [16:56] 겹쳐있는 객체 확인 / [17:26] glutSolidCube / [19:22] 회전 값 입력 / [19:48] glutWireCube / [20:10] glutSolidSphere / [20:37] glutWireSphere / [21:18] glutSolidTorus / [22:03] glutWireTorus / [22:45] glutSolidCone / [23:30] glutWireCone / [23:40] 회전 값 입력하여 원뿔 확인 / [24:22] 원뿔-z축이 원점 / [25:00] glutWireTeapot / [25:14] 회전 값 입력하여 주전자 확인 / [25:41] Teapot모델을 이용해 콜백함수 실습 / [26:14] glutCreateMenu / [26:26] glutAttachMenu / [26:45] glutAddMenuEntry / [27:00] MenuFunction함수 선언 / [27:18] glTranslatef-x축으로 10만큼 이동 / [27:48] 이동 서브메뉴 / [28:26] 메인메뉴 / [29:18] y축,z축 이동 / [29:48] 회전 서브메뉴 / [30:56] glRotatef-x,y,z축 회전 / [31:37] 이동과 회전 확인 / [32:36] 확대 서브메뉴 / [33:22] glScalef-x,y,z축 확대 / [34:19] 초기화 추가 / [35:14] 이동,회전,초기화 확인

04 3D좌표 part2
키보드 콜백함수를 이용한 scale, 직교투영과 원근투영
30분
책갈피 : [00:20] 서브메뉴3 확대 / [00:49] glScalef-x,y,z축 확대 / [01:34] 확대 확인 / [02:00] 초기화 / [02:23] 축소 / [02:30] 축소 서브메뉴 / [03:30] glScalef-x,y,z축 축소 / [04:10] 축소 확인 / [04:39] 초기화 / [04:46] 키보드 콜백함수 / [05:08] KeyBoard함수 세팅 / [05:41] 키보드 콜백함수를 이용해 확대,축소,이동,회전 / [06:30] 3가지 변수 생성 / [07:00] glTranslatef-변수 입력 / [07:15] switch 조건문 / [07:46] case문-대/소문자 구분 / [08:33] glutPostRedisplay 확인 / [08:52] z축만 변화 없음 / [09:24] 변환 행렬의 문제 / [10:33] 메뉴 콜백함수 실습 확인 / [11:11] 3차원 변환 / [11:35] 원근투영 / [11:43] gluPerspective 함수 / [12:16] 입력 값 / [12:41] glOrtho함수와 따로 사용 / [12:56] 관측 변환 / [13:16] gluLookAt 함수 / [14:05] 입력 값 / [15:11] 3차원 모델 확인 / [15:45] z축 방향 변화 확인 / [16:11] glRotatef / [16:41] case문 / [17:59] 회전 확인 / [18:26] 자연스러운 원근투영 3차원 변환 / [18:45] glScalef / [19:32] 변수 값 초기화 설정 / [19:52] case문 / [20:02] 확대/축소 확인 / [21:02] 마우스와 타이머 콜백함수 / [21:11] Mouse 함수 / [21:44] TimerFunc 함수 / [22:00] 마우스와 타이머 콜백함수 호출 / [22:18] 마우스 if문 / [22:55] glutPostRedisplay / [23:06] 타이머 glutPostRedisplay 호출 / [23:17] glutTimerFunc / [24:06] 변수 선언 / [24:18] if문 / [25:00] 마우스 오른쪽 버튼 클릭-타이머 호출 / [25:59] TimerFunc-glRotatef / [26:10] 타이머 확인 / [26:48] TimerFunc-glTranslatef / [27:03] x,y,z축 값 입력 / [28:17] cos/sin값 입력 / [28:52] 타이머 확인 / [29:11] angle값 변경 / [29:22] 타이머 확인

05 후면제거, 은면제거
공과 주전자를 이용한 후면제거와 은면제거 실습
30분
책갈피 : [00:06] 후면제거/은면제거 / [00:19] 벡터 개념 / [00:36] 법선 벡터 / [01:03] 원 생성 / [02:04] 후면-물체의 눈에 보이지 않는 부분 / [02:23] 솔리드로 확인 / [03:07] 후면제거-효율성 / [03:23] 후면제거 사용방법 / [04:00] 시점 벡터/법선 벡터 / [04:30] 후면제거에 사용되는 함수 / [04:42] glEnable 함수 / [05:10] glCullFace 함수 / [06:00] glDisable 함수 / [06:30] 후면처리 한 상태 확인 / [07:58] 은면제거 / [08:13] 은면-다른면에 가려서 보이지 않는 부분 / [08:48] glutSolidTeapot / [09:11] 확인 / [10:35] 은면제거에 가장 필요한 것-3차원 좌표상의 z축좌표 / [11:05] 깊이 측정 / [11:22] glutnitDisplayMode-GLUT_DEPTH 설정 / [12:11] glEnable-GL_DEPTH_TEST / [12:26] 깊이 측정 비활성화 / [12:54] 깊이 buffer 초기화 / [13:07] glClear-GL_DEPTH_BUFFER_BIT / [13:52] glClearDepth / [14:28] 확인 / [15:24] 후면제거 후 은면제거 / [16:30] 육면체 생성 / [17:11] gluLookAt 값 변경 / [18:07] 쉐딩 / [18:40] glShadeModel 함수 / [19:03] smooth/flat / [19:41] KeyBoard 세팅 / [19:59] TimerFunc / [21:18] bool값 입력 / [21:59] case문 / [22:41] glutPostRedisplay 호출 / [22:52] 확인 / [23:47] 키보드를 이용해 큐브 자동회전 만들기 / [23:56] 변수값 설정 / [24:37] 확인 / [25:18] 주석 제거 후 확인 / [26:22] 주석 걸고 확인 / [26:55] 후면제거와 은면제거 확인 / [28:07] shadig 적용 / [29:07] 확인

06 조명
ambient, diffuse, specular 조명 설정과 재질에 대한 실습
28분
책갈피 : [00:05] 조명 / [01:40] 조명활성화 함수-glEnable(GL_LIGHTING) / [01:57] glutSolidSphere / [03:34] 조명 정의 / [03:50] 3가지의 조명 / [04:14] AmbientLight(주변조명) / [04:30] 일정한 방향이 존재 하지않는 조명 / [05:15] glLightfv 함수 / [05:59] 8개의 값 / [06:30] AmbientLight 배열 값 / [07:39] DiffuseLight(확산조명) / [08:01] 흩어지는 분산조명 / [09:09] glLightfv 함수 / [09:39] SpecularLight(반사조명) / [10:13] 하이라이트 / [10:48] glLightfv 함수 / [11:22] 조명 위치 설정 / [11:37] LightPosition 배열 값 / [12:20] 조명 활성화 / [13:01] 조명 위치,방향 자유롭게 조절 / [13:16] 재질 설정 / [13:52] glMaterialfv 함수 / [14:03] 재질을 적용할 곳 / [14:22] 재질의 속성 설정 / [15:01] 재질 세팅 / [16:10] shinness 빛의 양 조절 / [16:36] 확인 / [17:40] 조명의 색에 따라 색이 변화 / [18:11] 컬러 트레킹 설정 / [18:48] 확인 / [19:18] 매끄러운 3차원 구모형 확인 / [20:41] 키보드를 이용한 조명 변화 / [20:52] KeyBoard세팅 / [21:33] 조명 변수 / [21:44] ambientR/ambientG/ambientB 값 / [21:56] diffuseR/diffuseG/diffuseB 값 / [22:11] specularR/specularG/specularB 값 / [22:33] 변수로 변경 / [23:15] switch/case / [23:36] break / [25:00] glutPostRedisplay 설정 / [25:26] 조명 변화 확인 / [27:07] 초기화 / [28:02] ambient와 diffuse조명의 차이

07 [실습] 태양계 만들기
지금까지 배운것들을 이용하여 간단한 태양계 만들기 실습 진행
34분
책갈피 : [00:04] 기본적인 뷰 세팅 / [00:35] SetUP 함수 / [00:52] 화면 세팅에 관련된 부분들 가져오기 / [01:00] drawScene 내부의 SetUp / [01:18] double buffering / [02:07] 부드러운 화면 효과 / [02:15] double buffering 사용방법 / [02:46] glutSwapBuffers 함수 / [03:07] 3차원 좌표 축 그리기 / [03:30] 행렬스택 세팅 / [03:43] 3d 선 긋기 / [04:00] x축 그리기 / [04:58] y축 그리기 / [05:15] z축 그리기 / [05:46] 확인 / [06:15] 축을 보고 카메라 세팅 어떻게 되어있는지 확인 / [07:10] Draw3DLine 함수 / [07:46] 태양계 실습 / [08:16] 행렬스택의 관계 / [08:56] 행렬스택 안에 glPushMatrix/glPopMatrix / [09:16] 빨간색 구 태양으로 설정 / [09:24] 수성은 녹색으로 설정 / [10:09] 금성 / [11:03] 지구 / [11:54] gluLookAt 값 변경 / [12:20] 태양계 확인 / [12:46] 태양을 중심으로 수성,금성,지구 rotate / [13:05] 변수 설정 / [13:33] rotate가 timer를 통해 계속 돌 수 있도록 설정 / [13:56] 메인함수에 glutTimerFunc 호출 / [14:20] glutPostRedisplay 설정 / [14:41] wRotate값 계속 증가 / [15:31] 동일하게 rotate하는 행성들을 따로 rotate하게 설정 / [16:03] 변수 추가 / [16:11] 행성의 공전,자전 주기를 행성의 이름을따서 만들기 / [16:41] 공전 Rev / [16:52] 자전 Rot / [17:11] 수성 행렬스택 안에 입력 / [17:40] 공전과 자전의 차이 / [18:11] rotate와 translate 순서 / [19:14] 금성 세팅 / [19:40] 지구 세팅 / [20:07] 타이머 / [21:30] 타이머 여러개 생성 / [22:41] 공전 주기 / [24:11] 확인 / [24:48] 달 만들기 / [25:03] 행렬스택 따로 생성 / [26:00] 달의 공전,자전 설정 / [26:15] 확인 / [27:07] 달 타이머 생성 / [27:48] 달 공전 값 증가 / [27:56] 확인 / [28:25] 조명 세팅 변경 / [29:10] 확인 / [29:45] 자전 타이머 / [30:25] 수성 자전 주기 먼저 설정 / [33:07] 공전,자전 확인

08 텍스쳐 매핑 part1
텍스쳐 매핑실습
33분
책갈피 : [00:05] 텍스쳐 매핑 / [00:36] 사전작업 5가지 / [01:22] 텍스쳐 기능 활성화 / [01:33] glEnable 함수 사용 / [02:15] 비활성화 glDisable / [02:30] 텍스쳐 영상 / [02:57] glTexImage1D 함수 사용 / [03:15] target / [03:35] level / [04:46] internalformat / [05:43] width / [06:00] border / [06:10] format / [06:46] type / [07:00] pixel / [07:15] 변수 지정 / [07:40] glTexImage2D / [08:07] 높이값 / [08:16] 텍스쳐 매핑 방법 / [08:45] 수동 텍스쳐 매핑 / [09:01] 텍스쳐의 위치를 설정하는 함수 glTexCoord2f / [10:13] 텍스쳐 좌표 따로 설정 / [10:33] s는 수평방향의 이미지 좌표 t는 수직방향의 이미지 좌표 / [11:46] 자동 텍스쳐 매핑 / [12:07] glTexGenf 함수 / [13:35] 텍스쳐 파라미터 명시 / [14:05] glTexParameterf 함수 / [14:33] 화소의 텍스쳐 선택 방법을 결정하는GL_TEXTURE_MAG_FILTER 값 / [15:01] 래핑 GL_TEXTURE_WRAP_S / [15:31] 래핑 GL_REPEAT/GL_CLAMP / [16:26] 화소 GL_NEAREST/GL_LINEAR / [16:47] 텍스쳐 환경 / [17:03] glTexEnvf 함수 사용 / [17:41] GL_DECAL / [17:48] GL_REPLACE / [18:00] GL_MODULATE / [18:11] GL_BLEND / [18:56] 코드에 비트맵 파일 가져오기 / [19:15] LoadBitmap 함수 / [19:47] 텍스쳐 변수 설정 / [20:52] 비트맵 사이즈 설정 / [21:06] if문 / [21:25] 비트맵 파일 헤더 / [21:45] 비트맵 파일인지 확인 / [22:06] 비트맵 인포 / [22:26] 비트맵 이미지 데이터 넣을 메모리 / [22:52] 비트맵 인포 헤더 읽어오기 / [23:15] 비트맵 크기 설정 / [24:11] 비트맵 크기만큼 메모리 할당 / [24:51] 비트맵 데이터를 비트에 저장 / [25:32] 비트맵 파일 불러오기 과정 완료 / [25:48] 모델에 텍스쳐를 입히는 과정 순서 코드 / [26:22] glGenTextures 함수 / [26:56] glBindTexture 함수 / [27:33] m_bitmap 변수 지정 / [28:07] 텍스쳐 이미지 정의 glTexImage2D / [29:00] glTexParameteri / [30:21] glTexEnvi / [30:52] glEnable / [31:11] glBindTexture / [31:33] glColor3f / [31:48] glVertex3f / [32:19] 정점 앞에 glTexCoord2f 설정 / [33:08] 모델에 텍스쳐를 불러오는 텍스쳐 매핑 방식

09 텍스쳐 매핑 part2
정육면체에 텍스쳐 매핑을 적용하는 실습
29분
책갈피 : [00:05] 텍스쳐 매핑 실습 / [01:10] 1번 텍스쳐가 저장된 사각형 / [01:29] 육면체의 텍스쳐 / [01:55] 텍스쳐 설정 명시 / [02:21] 텍스쳐 좌표는 위의 코드와 동일 / [02:52] glVertex3f / [03:27] gluLookAt 값 변경 / [03:38] 확인 / [04:00] 색의 혼합 이유는 환경설정 / [04:30] GL_MODULATE / [04:57] 혼합하지 않고 원래 색으로 나오게 하는 방법 / [05:25] 확인 / [05:41] GL_ADD / [06:00] GL_REPLACE값으로 변경 / [06:30] 육면체 표현-텍스쳐 배열의 값은 6 / [07:30] 눈에 보이는 3개의 면에만 텍스쳐 매핑 / [08:22] 기존 세팅 삭제 / [08:28] 바닥 깔기 설정 / [08:48] DrawFloor 바닥 만들기 / [09:41] floor비트맵 파일 불러오기 / [10:03] 텍스쳐 생성시 주의점 / [10:41] 텍스쳐 환경설정 / [11:39] 텍스쳐 좌표 설정 / [12:22] 바닥 세팅 완료 / [12:37] drawScene에서 DrawFloor함수 호출 / [12:52] 확인 / [13:26] 객체 띄우기 / [13:48] DrawObject / [14:01] 정육면체 실습 코드 가져오기 / [14:50] 동일하게 텍스쳐 좌표 설정 / [15:20] 각 면에 동일한 텍스쳐 / [16:03] drawScene에 DrawObject함수 호출 / [16:45] object 사이즈 수정 / [17:26] 이동 변수 설정 / [17:52] glTranslatef안에 입력 / [18:17] KeyBoard 세팅 / [18:25] mySpecialKey 함수 / [18:44] glutSpecialFunc 함수 / [19:18] 좌우상하 방향키 사용 / [20:47] 확인 / [21:56] 배경에 비가 내리는 모습 표현 / [22:03] DrawRain / [22:51] solidcube를 얇게 만들어 비로 표현 / [23:11] raincount 설정 / [23:22] for문 / [23:56] viewRain / [24:22] 초기값 설정 / [25:52] glTranslatef / [26:30] RainTimer 함수 / [27:30] 확인 / [27:41] 스케일 변경 후 확인 / [28:22] 배경색 변경 후 확인

10 스플라인 곡선
마우스 포인트 클릭(제어점)을 이용한 스플라인 곡선 실습
32분
책갈피 : [00:08] 스플라인 곡선 / [00:22] 스플라인 구성 방법 / [01:06] 베지어 스플라인 그려보기 / [01:23] 제어점 / [01:38] 보관 제어점 / [02:00] 근사 제어점 / [02:57] 제어 그래프 / [03:19] 실습 / [04:40] reshape함수의 내부 / [05:15] glOrtho함수를 이용 / [06:30] glfloat controlpoint-제어점 만들기 / [06:53] 제어점 설정 / [07:30] drawspline함수 선언 / [07:45] drawspline함수 작성 / [07:54] glshademodel-폴리곤 색 지정 / [08:22] glmap-제어점 설정 / [09:33] 파라미터에 따라 값 입력 / [10:16] glenable / [10:35] glbegin/glend / [10:39] glcolor / [10:46] for문-glevalcoord / [11:28] 현재 지점까지의 제어점 계산 / [11:33] gldisable / [11:46] 제어점 찍어주기 / [12:41] 제어점을 통한 스플라인 완성 / [12:50] 확인 / [13:43] 제어점 변경 / [13:52] 확인 / [14:20] 제어점 변경 후 확인 / [15:05] 마우스 포인트 클릭(제어점)을 이용한 스플라인 곡선 실습 / [15:37] 제어점의 한계 지정 / [15:56] float controlcount / [16:18] dspline값 설정 / [16:41] mouse함수 / [17:14] mouse함수 내부 조건문 / [17:56] controlpoint controlcount / [18:37] 마우스 클릭하면 count증가 / [19:33] 클릭하는 위치와 제어점 위치 / [20:21] 마우스가 클릭하는 위치의 좌표 값 / [23:41] 마우스 좌표-모델 변환과 투영 행렬, 뷰 행렬 / [24:21] viewpoint배열 생성 / [24:45] 윈도우 좌표계로 변형한 좌표 값 / [25:26] 배열 viewport에 저장 / [25:33] viewport배열 값 / [26:17] y스크린의 좌표-높이값에서 y를 뺀 값 / [26:33] gl_modelview_matrix의 크기를 구해서 modelview에 값을 저장 / [26:48] glgetdoublev-지정해 두었던 projection배열의 값 저장 / [27:07] glreadpixels-좌표값 읽어오기 / [27:37] gluunproject / [28:44] 윈도우 좌표계에서의 좌표 값 / [29:44] glortho / [30:52] 실행 화면 / [31:18] 스플라인 완성

11 스플라인 곡면
직접적인 선형 보간으로 이루어지는 베이제 스플라인 곡면 실습
33분
책갈피 : [00:08] 스플라인 곡면 / [00:24] 베지어 곡선과 비슷한 과정 / [01:26] 곡면 제어점 설정 / [01:49] 제어점 설정 함수 파라미터 / [02:23] 곡면에서 타겟 먼저 설정 / [03:12] v1과 v2 / [03:51] 제어점 배열을 가리키는 controlpoint / [04:30] glenable함수를 사용해 곡면 그리기 활성화 / [04:46] 그리드를 이용한 곡면그리기 함수 / [05:15] 파라미터 값 입력 / [06:26] 선으로 구성된 2d그리드를 연결해서 계산해주는 함수 / [06:39] 파라미터 값 / [06:58] gl_point/gl_line/gl_fill / [07:29] gl_line으로 그리드 연결 / [07:38] i1과 i2/j1과 j2 / [08:28] 3차원 상의 제어점 설정 / [09:20] 한 행의 배열 / [10:37] for문 / [10:56] 실행 / [11:46] gl_point로 그리드 연결 / [11:52] 실행 / [12:00] gl_fill로 그리드 연결 후 실행 / [12:48] 다시 gl_line으로 그리드 연결 / [13:16] 3차원 카메라 뷰를 키보드 좌표를 이용해서 회전 / [13:35] 키보드 함수 선언 / [13:50] 키보드 함수 만들기 / [14:09] switch/case / [14:48] glutreshapefunc / [15:20] winx/winy값 정의 / [15:43] 회전시킬 변수를 넣을 glulookat함수 / [16:32] 카메라 변수 초기값 설정 / [16:56] glulookat에 들어갈 파라미터 값 / [17:21] 키보드 eyex값 설정 / [17:41] 실행 / [18:06] eyez값 설정 / [19:03] openGL 3d카메라는 3차원 함수와 비슷 / [19:52] eyex와 eyez값 동시 설정 / [20:07] 실행 / [20:52] x,z를 이용해서 y축을 중심으로 회전하는 코드 작성 / [21:22] sin/cos 사용 / [23:48] 실행 / [25:22] 9개의 제어점을 이용한 베지어 곡면 / [25:52] 2차 베지어 곡면 / [26:29] 제어점 4개로 이루어진 3차 베지어 곡선 / [26:48] 16개의 제어점으로 이루어진 3차 베지어 곡면 / [27:45] 양방향 곡면의 연결 / [28:07] y축값 변경 후 실행 / [29:32] 제어점이 많을수록 부드러운 선 완성 / [30:10] 16개의 제어점을 가진 곡면 만들기 / [31:26] 제어점 설정 완료 / [31:59] 실행 / [32:37] 그리드 값 변경 / [32:57] 부드러운 곡면 완성

12 [실습] 3차원 사람 모형 모델 만들기
사람모형의 모델 만들기 실습
34분
책갈피 : [00:10] 배운것들을 종합한 응용예제 / [00:42] 3차원 사람 모형 모델 만들기 / [01:56] 평면 지형 만들기 / [02:38] glvertex 4개를 가지고 하나의 평면 구성 / [02:53] gltranslatef / [03:07] 평면 구성은 반시계방향 / [04:00] 일반적으로 모든 폴리곤의 방향은 반시계방향 / [04:26] setup-glfrontface / [04:46] glcullface-어느면을 그릴지 지정을 해주는 함수 / [07:38] 몸통 안에 들어갈 인자값 / [08:11] glpushmatrix/glcolor3f/glpopmatrix / [08:45] GLUquadricObj변수 선언 / [08:54] 실린더 객체 선언 / [09:22] 함수 내부에서 quadric객체 선언 / [09:39] glucylinder함수 안에 객체 생성 / [09:48] 파라미터 값 설정 / [10:37] glrotatef / [11:03] drawbody안에 들어갈 파라미터 / [11:41] 카메라 변수 값 설정 / [13:22] 실린더 모양의 오브젝트 확인 / [13:54] 얼굴 만들기 / [14:07] glpushmatrix/glpopmatrix / [14:41] cylinder객체 생성 / [14:54] glusphere / [15:31] 머리의 gltranslatef값 조정 / [15:48] 팔,다리를 만들기 위한 전역변수 설정 / [16:52] 오른쪽 팔 만들기 / [17:17] glpushmatrix/glpopmatrix / [18:55] color값 설정 / [19:21] 실린더 객체 생성 / [19:30] glrotate값 설정 / [20:06] gltranslatef값 설정 / [22:32] 생성할 실린더 인자값 / [24:02] 왼쪽 팔 만들기 / [24:48] glpushmatrix/glpopmatrix / [25:11] glrotate / [25:33] gltranslatef / [26:22] 실행 / [27:40] 오른쪽 다리 만들기 / [28:03] glpushmatrix/glpopmatrix / [28:22] glrotate / [28:37] gltranslatef / [28:56] 실린더 생성 / [29:11] 오른쪽 다리 전역변수 생성 / [31:17] 왼쪽 다리 만들기 / [31:40] glpushmatrix/glpopmatrix / [32:05] 실린더 생성 / [32:20] glrotate/gltranslatef / [33:09] 화면 확인

13 [실습] 애니메이션
사람모형의 모델의 각각 부위별로 타이머를 이용해서 뛰어가는 포즈를 만드는 실습
35분
책갈피 : [00:25] 타이머를 이용해 걸어가는 모양 만들기 / [00:59] 타이머 함수 생성 / [01:26] 메인에 타이머 함수 지정 / [02:00] glutpostredisplay함수 / [02:30] drawobject함수 생성 / [02:46] 몸통,머리,팔,다리 잘라내고 drawobject함수 안에 붙이기 / [03:29] 왼쪽 팔 움직이기 / [04:12] sin/cos함수 사용 / [05:28] 화면 실행 / [06:38] 오른쪽 팔 움직이기 / [07:00] rightarm_x함수 / [07:30] 왼쪽팔과 오른쪽팔 움직임 확인 / [08:16] 팔 함수 수정 / [09:13] 다리 움직이기 / [09:50] 화면 실행 / [10:07] 다리 함수 수정 / [10:52] 카메라를 돌렸을 때 나오는 화면 / [11:31] 몸 전체 움직이도록 반동 넣어주기 / [11:52] x축으로 반동을 넣기위한 rotate / [12:18] 화면 실행 / [12:41] sin값에 절대값 / [13:11] y축 값 / [13:31] 자연스러운 걸음걸이 완성 / [14:00] translate를 이용해 y축으로 반동 / [14:26] gltranslatef값 설정 / [14:50] 화면 실행 / [15:33] 값을 조금 낮추면 더 자연스럽게 뛰는모습 완성 / [17:52] 오늘쪽 손 만들기 / [18:21] 인자값 y로 지정 / [18:52] glpushmatrix/glpopmatrix / [19:15] gltranslatef / [21:41] drawrighthand / [21:56] 화면 실행 / [22:18] 손만 따로 움직일 수 있도록 만들기 / [22:37] 손의 움직이는 값(절대값) / [23:59] 왼쪽 손 만들기 / [24:21] glpushmatrix/glpopmatrix / [24:45] gltranslatef / [25:03] 실린더 생성 / [25:30] drawlefthand / [25:41] 인자값 설정 / [26:41] 손만 따로 움직일 수 있도록 만들기 / [26:52] 손의 움직이는 값(절대값) / [27:41] 오른쪽 발 만들기 / [27:51] 함수 생성 / [28:00] glpushmatrix/glpopmatrix / [28:26] gltranslatef / [28:56] 실린더 생성 / [29:32] drawrightfoot안에 들어갈 값 / [30:03] 발의 움직이는 값(절대값) / [31:37] 왼쪽 발 만들기 / [31:56] glpushmatrix/glpopmatrix / [32:30] 실린더 생성 / [33:06] drawleftfoot안에 들어갈 값 / [33:30] 발의 움직이는 값(절대값) / [34:15] 관절이 움직이는 각도값 수정 / [34:38] 뛰어가는 모습 완성

14 [실습] 스카이박스
3차원 화면 내의 배경, 스카이박스 만들기 실습
26분
책갈피 : [00:10] 3차원 화면 내의 배경 / [00:20] 스카이박스 / [00:47] 스카이박스 그리는 방법 / [01:37] 비트맵을 로드할 코드 / [02:00] 스카이박스를 만들기 전 사람모형 완성 / [02:29] 얼굴에 눈 완성 / [03:30] 텍스쳐 로드할 부분 코딩 / [03:53] 텍스쳐 변수 설정 / [04:15] 비트맵 파일을 불러오는 함수 / [04:57] drawScene에서 loadTexture함수 / [05:38] glEnable함수 / [05:58] glBindTexture / [06:15] glBegin으로 한면 그리기 / [06:46] glVertex3f입력 / [07:09] glDisable로 마무리 하고 화면 실행 / [07:30] 첫번째 앞 면 텍스쳐 확인 / [08:52] 나머지 다섯방향의 텍스쳐 만들기 / [09:09] 미리 텍스쳐 이름을 저장 후 한꺼번에 로드 / [09:31] 텍스쳐 배열로 저장 / [10:07] gluint loadtexture함수 선언 / [10:33] loadtexture를 for문 사용해서 증가 / [11:37] gluint textureid변수 선언 / [12:13] return textureid로 마무리 / [12:48] 스카이박스가 그려지는 부분에 gldisable / [13:16] depth_test 비활성화 / [14:13] 스카이박스를 다 그리고 난 뒤 다시 활성화 / [14:56] 뒷면 스카이박스 / [15:28] glbegin/glend한 쌍을 이루는 함수 / [15:48] gltexcoord2f좌표 / [16:03] glVertex3f입력 / [16:44] 화면 실행 / [17:14] 왼쪽 스카이박스 / [17:37] 같은 함수 코드는 복사해서 사용 / [17:59] glVertex3f입력 / [18:45] 화면 실행 / [19:02] 오른쪽 스카이박스 / [19:07] glVertex3f입력 후 화면 실행 / [19:33] 위쪽 스카이박스 / [19:41] glVertex3f입력 후 화면 실행 / [20:07] 카메라 변수 값 변경 / [21:00] glulookat부분의 파라미터 값 변경 / [21:33] 아래쪽 스카이박스 / [21:48] glVertex3f입력 / [22:33] 화면 실행 / [22:41] drawterrain비활성 / [23:00] 화면 실행 / [23:26] 사람모형 위치 조정 / [23:51] 카메라 변수 값 변경 / [24:18] glulookat 센터 값 변경 / [24:45] 화면 실행 확인

15 모핑
삼각형에서 원으로, 원에서 삼각형으로 바뀌는 모핑 애니메이션 실습
1시간 4분
책갈피 : [00:07] 모핑 애니메이션 / [00:41] 모핑의 방법 / [01:37] 제어점 설정을 통한 모핑 애니메이션 / [02:07] 2d 화면으로 전환 / [02:50] ortho-직교 투영으로 변환 / [03:23] 2d 화면 설정 / [03:38] 화면 실행해서 2d 확인 / [04:00] 변수 만들기 / [04:38] 원의 제어점 설정 / [05:08] morphingvertex변수 선언 / [05:30] controlpoint / [05:46] drawscene에 원 만들기 / [06:14] 색상 정하기 / [06:46] 초기화 값 설정 / [07:10] 원을 만드는 공식 / [08:16] 첫번째 원 세팅 완료 / [08:28] 오류부분 수정 / [09:15] 타이머 / [09:31] 폴리곤 변수 만들기 / [09:46] 타이머 설정 / [10:09] enum설정 / [11:07] polygontype설정 / [11:37] 원에서 오각형까지의 모핑 애니메이션 / [12:11] 구조체 안에 pentagon 변수 생성 / [13:11] 제어점 설정 / [13:28] controlpoint값 증가 / [13:58] 제어점의 값 / [14:26] controlpoint에서 빼야 할 값 / [14:50] 제어점의 값 / [15:28] 제어점을 이용한 모핑 애니메이션 과정 / [16:07] 화면 실행 / [16:22] 오류 발생 / [17:18] polygontype값이 pentagon / [17:48] 오각형에서 사각형으로 바뀌는 단계 / [18:45] rectangle 변수 생성 / [19:03] 초기화값 0으로 설정 / [19:26] 제어 판별 변수 / [20:22] 제어점 설정하는 과정 / [22:02] 화면 실행해서 확인 / [22:47] 오각형 왼쪽 상단에 있는 꼭지점 값 변경 / [23:25] 화면 실행해서 확인 / [24:14] 오른쪽 하단에 있는 꼭지점 값 변경 / [24:45] 화면 실행해서 확인 / [25:00] 속도 값 변경 / [26:03] 왼쪽 하단에 있는 꼭지점 값 / [26:41] 화면 실행해서 확인 / [27:00] rectangle에서 bool값을 지정한 이유 / [27:52] polygontype값이 rectangle / [28:07] 사각형에서 삼각형으로 변환 / [28:56] 제어점 생성 / [29:17] 초기화값 0으로 설정 / [30:45] 18번째 제어점 가운데로 이동 / [31:02] 162번째 제어점 가운데로 이동 / [31:37] 화면 실행 / [32:22] polygontype값이 triangle / [32:51] 삼각형에서 다시 원으로 변환 / [33:42] polygontype값이 circle / [33:50] 화면 실행 / [34:12] 타이머 추가 / [34:29] 모핑 애니메이션을 진행하면서 color값도 변환 / [34:57] color값에 변수 추가 / [35:19] 화면 실행해서 모핑 애니메이션 확인 / [35:52] 컨트롤 포인트 제어점 없이 모핑을 진행하는 애니메이션 / [36:49] 변수 설정 / [37:30] drawscene내부에 원 그리기 / [38:15] 값 설정 후 확인 / [38:52] i값 / [39:37] 도형 변화 / [41:07] i++값 제어 / [41:42] reverseCPoint변수 지정 / [41:52] controlpoint값 만들기 / [42:15] controlpoint제어값은 timer에서 설정 / [44:45] 실행 / [45:21] 도형이 변하는 과정 확인 / [46:52] 도형의 위치를 변화하는 작업 / [47:15] moveTimer함수 만들기 / [48:07] xpos의 값 변화 / [49:00] 변수 생성 / [49:22] reverseposX값 / [49:45] 도형이 왔다갔다 하는 것 확인 / [50:36] ypos값 / [51:50] y축과 x축 계산식 과정 간결하게 작성 / [52:29] 도형이 움직이는 과정 / [53:43] reversePosY값을 0으로 설정 / [54:34] ypos값이 150이하인 경우 / [55:14] ypos값이 150에 도달했을 경우 / [56:22] x값은 반전을 하고 y값은 움직이지 않도록 설정 / [57:00] x축의 값은 움직이지 않고 y축의 값은 움직이도록 설정 / [57:52] ypos의 값이 250에 도달했을 경우 / [59:22] 범위 설정 중요 / [59:45] ypos값이 350일 경우 / [60:49] 최종 위치에 도달했을 경우 / [62:07] if문으로 조건을 나열해서 완성 / [62:37] switch case문 사용 / [62:50] positiontype변수 만들기 / [63:36] case조건 걸기

16 안티 엘리어싱과 terrain
엘리어싱, 안티엘리어싱에 대한 실습과 raw데이터를 이용한 heightmap, 높이맵 지형 만들기 실습
1시간 4분
책갈피 : [00:07] 엘리어싱과 안티 엘리어싱 알아보기 / [00:31] 코드 확인 / [01:03] drawScene에 원 그리기 / [01:34] 2개의 지역변수 생성 / [01:48] glGetFloatv함수 호출 / [02:30] size 0과 size 1의 배열 / [02:58] glPointSize함수 호출 / [03:46] for문의 첫번째 값은 지역변수 angle / [04:15] glVertex3f / [04:55] 위치 조절 / [05:29] 원 확인 / [05:53] 엘리어싱 설명 / [07:00] 원래 모양과 복원된 모양이 왜곡되어 나타나는 현상 / [07:30] 안티 엘리어싱 / [08:05] 엘리어싱 감지방법 알아보기 / [08:54] 코드 설정 / [09:28] 라인 그리기 / [10:28] 코드 실행 / [12:07] 안티 엘리어싱 기법 사용 / [12:22] 혼합 기능 활성화 / [12:52] blend모드 설정 / [13:31] blend함수에 들어가는 파라미터 값 / [15:01] gl_point_smooth값 / [15:18] glhint함수 / [15:50] 파라미터 값 / [17:06] glDisable함수 / [17:33] gl_line_smooth활성화 / [18:37] 실행 확인 / [20:17] 블랜딩 기능, 스무스 함수, 혼합 함수와 스무스 함수를 사용할 때의 비교 / [20:33] 변수 추가 / [21:03] color_value라는 배열 생성 / [22:06] red, green, blue값 / [22:44] color_value에 들어갈 값 / [23:25] blendmode가 true의 경우 / [23:47] smoothmode에 들어갈 값 / [24:33] Keyboard사용 / [25:33] glutPostRedisplay작성 / [26:56] index값들을 하나씩 넣어주는 이유 / [27:21] 실행 확인 / [27:52] smooth모드 동작 / [28:11] blend와 smooth모드 비활성화 / [28:41] 모두 적용 시켰을 경우 / [29:15] blend모드 비활성화 / [29:30] 비교 확인 / [30:33] 높이맵 지형 만들기 / [30:48] raw데이터 / [31:22] heightmap을 적용시키는 과정 / [32:30] 평평한 바닥 만들기 / [32:43] define정의 / [33:45] 텍스쳐 변수 / [34:45] 비트맵 파일 불러오기 / [35:21] GLuint LoadTexture함수 / [37:45] 세팅된 textureid값 return / [38:07] renderterrain함수 만들기 / [39:07] 환경 변수 설정 / [40:28] terrain에 관련된 정보 입력 / [42:14] 실행 확인 / [42:21] 카메라 살펴보기 / [42:45] 카메라 변수 값 조절 / [43:27] 실행 확인 / [44:15] 높이맵 파일 불러오기 / [44:28] 높이맵 변수 설정 / [45:14] int heightmapinfo함수 선언 / [45:45] loadrawfile함수 내용 입력 / [47:00] 메인에서 함수 초기화 / [48:00] _height라는 raw데이터 정보를 renderterrain에 가져오기 / [48:36] render에 heightmap정보를 가져와 세팅 / [49:21] for문 사용해서 입력 / [49:58] 일정 값 만큼 증가하는 값 정의 / [50:52] glbegin과 glend지정 / [51:49] terrain_size-min_size입력 / [52:15] x, y, z에 해당 vertex정보 저장 / [52:30] x, y, z의 좌표값 / [53:15] vertex좌표를 2개 작성한 이유 / [54:15] heightMapInfo함수 작성 / [55:12] 실행 확인 / [55:36] Keyboard입력 / [56:06] glPolygonMode / [56:37] 실행 확인 / [57:13] coord좌표 설정 / [57:45] gltexcoord2f / [58:22] 실행 확인 / [58:59] map_scale 2배로 정의 / [59:52] 카메라 변수 값 조정 / [60:00] 실행 확인 / [60:45] min_size / [61:49] RenderTerrain에 파라미터값 int levle추가 / [62:08] min_size를 level로 변경 / [63:14] 정교한 terrain확인

17 카메라와 스카이박스
키보드를 이용하여 자유자재로 움직이는 카메라 만들기 실습과 지형위로 만들어지는 스카이박스 만들기 실습
1시간 9분
책갈피 : [00:12] 지형 위에 카메라 자유자재로 움직이게 만들기 / [00:29] 카메라 설명 / [00:42] openGL의 시점 좌표계 / [01:00] 시점 좌표계 설정은 gluLookAt함수 사용 / [01:38] gluLookAt에 의한 카메라의 원점 / [02:34] 카메라의 위치가 고정되어 있을 때 eye값만 변화 / [03:00] 카메라 회전 / [03:23] keyboard세팅 / [04:15] eyeX, eyeZ, eyeY설정 / [05:12] cos과 sin을 이용한 공식 / [05:46] 600이 가지고 있는 의미 / [06:15] 반대 방향일 때의 eyeX, eyeZ, eyeY설정 / [06:45] theta라는 각도값에 의해 회전값 변화 / [07:15] 실행 확인 / [08:11] y축으로 회전이 가능한 카메라뷰 만들기 / [08:41] 변수 선언 / [09:09] centerX, centerY, centerZ의 값 / [09:54] upX, upY, upZ의 값 / [10:39] 변수 speed선언 / [11:05] eye를 중심으로 회전하는 카메라 만들기 / [11:41] eye를 center로 변경 / [12:16] eye값 변경 / [12:30] 실행 확인 / [13:01] 회전되는 각도와 속도의 문제점 / [14:18] 600을 300으로 수정 / [14:56] case 'j' centerX와 centerZ에 eyeX와 eyeZ더하기 / [16:11] case 'L' centerX와 centerZ에 eyeX와 eyeZ더하기 / [16:26] 실행 확인 / [18:33] 이동하게 만들기 / [19:02] case 'i'와 'k' / [20:48] case i와 k에 speed값 설정 / [21:11] 실행 확인 / [21:33] speed값 조절 / [22:41] +와 -를 이용해서 시점 좌표의 중심을 이동시키는것은 무리 / [23:03] J와 L에 더한 eye값 삭제 / [23:22] 실행 확인 / [23:41] i와 k를 이용한 카메라의 앞, 뒤 이동 / [25:37] 코드 작성 / [26:30] eye와 center 두가지를 같이 움직이고 회전 / [27:17] 실행 확인 / [29:06] upX, upY, upZ 설정 / [29:26] X가 up일때의 화면 변화 확인 / [30:41] upX가 0이고 upZ가 축일 경우의 화면 / [32:29] X와 Y 둘다 up인 상태의 화면 / [33:00] Y와 Z의 up인 상태의 화면 / [33:42] 바탕에 스카이박스 만들기 / [34:44] 6개의 배열로 이루어진 변수 생성 / [35:37] GLuint skyboxObj변수 / [36:15] RenderSkybox함수 호출 / [36:58] for문으로 6개의 텍스쳐 부르기 / [37:45] RenderSkybox함수 작성 / [38:50] depth_test 비활성화 / [39:43] 6개의 텍스쳐를 quads로 한면씩 그리기 / [40:14] 스카이박스 변수 설정 / [42:00] 스카이박스를 만들기 위해 고려해야할 조건 / [42:57] 두번째 정점의 좌표 / [43:14] 세번째 정점의 좌표 / [44:37] 네번째 정점의 좌표 / [44:57] 뒷면 스카이박스 / [45:37] glTexcoord2f작성 / [46:14] back 정점 설정 / [47:34] 왼쪽 스카이박스 / [48:00] glTexcoord2f작성 / [48:30] left 정점 설정 / [49:28] 정점 작성의 방법 / [50:15] 오른쪽 스카이박스 / [50:43] right 정점 설정 / [52:28] top 스카이박스 / [53:07] top 정점 설정 / [54:22] 정점을 찾기 쉬운 팁 / [54:52] down 스카이박스 / [55:20] glTexCoord2f작성 / [56:13] down 정점 설정 / [57:05] glDepthMask함수 / [57:15] depth_test 활성화 / [57:45] 실행 학인 / [59:45] 블랜딩 / [61:20] Ortho를 사용해 2d화면으로 만들기 / [61:30] drawScene안에 삼각형 그리기 / [62:37] 실행 확인 / [62:45] 삼각형 크기 키우기 / [63:19] 블랜딩 설명 / [64:15] 바탕의 검정색과 삼각형의 노란색 혼합 / [64:30] gl_blend인수 활성화 / [64:45] blend함수에 들어갈 파라미터값 / [65:54] 실행 확인 / [66:15] 비율값 변경 / [66:42] 두번째 삼각형 만들기 / [68:14] 노란색 삼각형과 파란색 삼각형의 혼합 / [68:46] 바탕색을 흰색으로 변경

18 공튀기기게임
키보드, 마우스 등을 이용한 OpenGL 공튀기기 게임 만들기
41분
책갈피 : [00:08] 공튀기기 게임 만들기 / [01:07] drawScene에서 공 만들기 / [01:47] glBegin과 glEnd / [02:15] for문 사용 / [03:15] 공튀기기 변수들 / [03:37] radian변수 선언 / [04:00] xPos변수 선언 / [04:53] 원 확인 / [05:14] 타이머 만들기 / [06:15] circleTimer함수 선언 / [07:29] 확인 / [07:39] 화면 밖으로 나가는 공-공의 방향성 설정 / [08:00] 변수 directionX와 Y값 / [08:41] if 조건문 사용 / [09:07] yPos / [10:20] xPos / [10:52] if문 안에 or연산자 사용 / [11:22] 실행 확인 / [11:54] radian값 / [13:01] 실행 확인 / [13:24] 움직일 수 있는 바 만들기 / [13:56] DrawCircle, DrawBar함수 선언 / [14:16] bar-사각형 그리기 / [15:20] bar움직이기 / [15:46] xBarPos, yBarPos변수 생성 / [16:14] 마우스 설정 / [16:33] 함수 Mouse안에 들어갈 변수 / [17:25] if 조건문 / [17:52] xBarPos값 설정 후 확인 / [18:48] glutPassiveMotionFunc / [19:15] 인자값 mouse의 x와 y값 / [19:37] 실행 확인 / [20:18] 공과 bar의 충돌 구현 / [20:45] 새로운 조건문 생성 / [22:22] 공의 x축이 bar의 x축 범위안에 있는지 확인 / [23:03] 실행 확인 / [23:30] 새로운 조건문 생성 / [23:45] messageBox팝업 띄우기 / [24:11] PostQuitMessage / [24:41] 공이 bar에 충돌하지 않고 바닥에 떨어질 경우 / [25:26] 벽돌 만들기 / [25:56] struct brick 벽돌 구조체 만들기 / [26:40] initialize함수 만들기 / [27:03] 초기값 설정 / [27:21] brick i.left와 right값 / [28:17] brick i.top과 bottom값 / [28:41] brick i.r, g, b컬러값 설정 / [29:33] DrawBrick함수 만들기 / [30:33] 실행 확인 / [30:52] 타이머에서 벽돌 충돌 체크 / [32:14] 충돌체크가 되는지 확인 / [32:22] 벽돌 컬러값 랜덤하게 만들기 / [33:00] rand 함수 사용 / [34:30] 게임을 열 때마다 컬러값 랜덤으로 만들기 / [35:19] 공이 벽돌과 충돌했을 경우 / [35:28] visible변수 생성 / [36:15] true와 false 체크 / [37:07] 실행 확인 / [37:36] 5개의 벽돌을 20개 만들기 / [39:45] initBrickY값 / [40:15] 실행 확인

19 적은 연산을 이용한 그림자
대략적으로 인지하여 조명과 물체간의 공간적인 위치를 고려하여 직접 만드는 간단한 그림자 실습
31분
책갈피 : [00:06] 그림자 실습 / [00:41] 그림자를 만들 물체와 바닥 만들기 / [01:10] 사각형으로 바닥 만들기 / [01:49] glVertex3f / [02:45] drawScene에서 DrawTerrain함수 호출 / [03:12] DrawObject함수 선언 / [03:53] 물체를 그릴 위치 / [04:15] 컬러값 입력 / [04:46] 6개의 사각형을 그려 육면체 만들기 / [06:39] 조명과 물체로 그림자 만들기 / [07:08] 그림자 변수 생성 / [07:30] ShadowPos값 설정 / [08:28] 키보드를 사용해서 그림자 회전과 이동을 시킬 변수 / [09:13] posX와 posZ값 / [09:54] 움직이는 부분 만들기 / [10:33] keyBoard함수 작성 / [11:07] switch case / [11:58] 지정된 알파벳을 눌렀을 경우 / [12:46] 실행 확인 / [14:56] depth_test와 lighting비활성화 / [15:26] 그림자 만들기 / [15:56] DrawShadow함수 정의 / [16:59] 조명의 방향 / [17:45] arr, dot변수 / [18:00] 새 파라미터 불러오기 / [19:10] calculationNormalVector함수 선언 / [19:56] DrawShadow안에 calculationNormalVector함수 만들기 / [20:45] 법선벡터 계산식 / [21:52] 벡터 연산 / [23:15] 단위 벡터화 / [23:37] 단위 벡터로 변환하는 함수 / [24:15] arr의 마지막 배열값 정의 / [25:07] dot 평면상의 한 점 정의 / [26:36] plane / [27:41] 그림자를 위한 연산과정 완료 / [28:00] 그림자를 만들 물체와 그림자가 될 것 / [28:18] glMultMatrixf / [29:21] 실행 확인 / [29:48] 조명의 위치 확인

20 도형 자르기
마우스 콜백함수를 이용한 도형 자르기 실습
48분
책갈피 : [00:08] 실습에 사용될 다각형 2개 만들기 / [01:03] 빨간색과 파란색의 다각형 / [01:18] glVertex2f / [01:51] 파란색 다각형은 gl_line_strip / [02:36] 확인 / [03:34] 도형 자르기 실습 / [04:28] DrawRect와 DrawBox함수 선언 / [05:30] Mouse함수 선언 / [05:46] MouseDrag함수 선언 / [06:15] MotionFunc안에 들어갈 파라미터값 / [06:46] Mouse함수 정의-if조건문 사용 / [08:01] 도형이 잘라지는 효과 만들기 / [08:16] 시작점과 끝점 변수 만들기 / [08:52] startMouseX값과 startMouseY값 / [09:45] endMouseX값과 endMouseY값 / [10:52] mouseCheck의 초기값 false / [11:16] 버튼이 눌렸을 경우 mouseCheck값 true / [12:18] 실행 확인 / [12:46] 드레그해서 선분 이어주기 / [14:18] 실행 확인 / [14:41] 포인트와 선분 확인 / [15:35] DrawRect안에 들어갈 파라미터 / [15:56] rectNum변수 생성 / [16:41] DrawRect안에 switch조건문 만들기 / [17:22] RectCut함수 / [17:56] RectCut안에 switch조건문 / [18:48] struct controlPoint만들기 / [19:11] controlPoint 4개의 배열 안에 들어갈 초기값 / [19:48] 실행 확인 / [20:11] DrawBox안에 있는 상수 변수로 바꾸기 / [20:51] RectCut함수의 내용-자르기 영역 / [21:40] 공식을 이용한 선분의 교차점 구하기 / [21:56] GetIntersectPoint함수 선언 / [22:41] 두 선분의 교차점 구하기 / [23:03] t와 s의 값 / [23:56] result x값과 result y값 / [24:47] GetIntersectPoint함수를 가지고 교차점 구하기 / [25:03] 0부터 3까지의 4개의 배열 사용 / [25:29] 변수 만들기 / [25:52] widthSlice, heightSlice / [26:37] 내부에 변수 생성 / [29:33] 자르기 영역 부분 완료 / [29:48] case2의 widthSlice, heightSlice경우 / [30:11] 8개의 배열 / [30:51] 가로로 잘렸을 때 / [33:15] for문 사용 / [34:07] 세로로 잘렸을 때 / [36:15] for문 사용 / [36:45] 가로로 잘렸을 때 y축 변화 / [37:00] 세로로 잘렸을 때 x축 변화 / [37:22] 실행 확인 / [37:52] 도형을 4등분 할 경우 만들기 / [38:35] 세로 영역 / [40:07] start2와 end2 변수 추가 / [41:12] 가로 영역 / [41:36] 16개 선분의 각각의 포인트 / [41:52] 2개의 사각형 동시에 자르기 / [45:28] 배열의 정점 완료 후 for문 / [46:27] 실행 확인 / [47:00] y값 / [47:28] 실행 확인


샘플확인 : 알지오 검색후 -> 강의검색란 -> OpenGL