알지오 평생교육원

로그인|회원가입|고객센터
HOME>IT전문가>그래픽 프로그래밍>OpenGL

OpenGL

OpenGL
20회차 속성과정
전체 : 12시간 45분|회차당 평균 : 38분15초

이용기간 2개월

전문강사 : 홍태우

270,000165,000



OpenGL 사용법 강좌
OpenGL은 실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표준 API 규격입니다. 마이크로스프트사의 DirectX와 함께 컴퓨터 그래픽 세계를 양분화하고 있으며, 현재 CAD, 정보시각화, 비행 시뮬레이션, 컴퓨터 게임 등 다양한 분야에서 널리 활용되고 있습니다. 알지오 OpenGL 강좌를 통해 화면 좌표계, 그리기 함수, 콜백함수, 3D좌표, 후면과 은면 제거, 다양한 조명 설정, 재질, 사람 모형 모델, 애니메이션 실습 등 OpenGL의 모든 부분을 배울 수 있습니다.
  • 01.37분 화면좌표와 뷰포트

    viewport, ortho를 통한 화면좌표계를 알아보고 기본적인 그리기 함수들에 대한 실습

    책갈피 : [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.36분 3D좌표 part1

    2D좌표에서 3D좌표계로의 변환

    책갈피 : [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.30분 3D좌표 part2

    키보드 콜백함수를 이용한 scale, 직교투영과 원근투영

    책갈피 : [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.28분 조명

    ambient, diffuse, specular 조명 설정과 재질에 대한 실습

    책갈피 : [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.33분 텍스쳐 매핑 part1

    텍스쳐 매핑실습

    책갈피 : [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.29분 텍스쳐 매핑 part2

    정육면체에 텍스쳐 매핑을 적용하는 실습

    책갈피 : [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.34분 [실습] 3차원 사람 모형 모델 만들기

    사람모형의 모델 만들기 실습

    책갈피 : [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.26분 [실습] 스카이박스

    3차원 화면 내의 배경, 스카이박스 만들기 실습

    책갈피 : [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.1시간 4분 안티 엘리어싱과 terrain

    엘리어싱, 안티엘리어싱에 대한 실습과 raw데이터를 이용한 heightmap, 높이맵 지형 만들기 실습

    책갈피 : [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.41분 공튀기기게임

    키보드, 마우스 등을 이용한 OpenGL 공튀기기 게임 만들기

    책갈피 : [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] 실행 확인