Day 1SDL 라이브러리 적용, 개발 환경 구축 및 테스트game.hgame.cppSDL_Init 함수를 이용해 SDL라이브러리를 초기화한다.지금은 비디오 서브시스템만 초기화하면 되므로 SDL_INIT_VIDEO를 SDL_Init함수로 초기화한다.윈도우 서브 시스템
Day2 이벤트 입력과 렌더링 운영체제에서는 유저가 애플리케이션 윈도우상에서 수행할 수 있는 여러 액션을 제공한다. 액션들을 표현하는 일반적인 방법은 이벤트를 사용하는 것이다. SDL은 운영체제로부터 받는 이벤트를 내부에 존재하는 큐(Queue)로 관리한다. 프레임마다
Day3 오브젝트 그리기와 게임 갱신하기오브젝트를 그리기위해 GenerateOutPut 함수에서 후면 버퍼를 클리어하고 난 뒤 전면 버퍼와 후면 버퍼를 교환하기 전에 그린다. 색으로 채워진 사각형 오브젝트를 그리기 위해 SDL은 SDL_RenderFillRect 함수를
Day4 게임 객체이전에 퐁 게임을 구현할 때는 별도의 클래스를 사용하지 않고 Game 클래스에서 멤버 변수를 사용해서 공과 벽, 패들을 구현했다. 그러나 게임의 크기가 커지면 좋은 다른 방법을 찾아야한다. 게임 객체(game object)는 게임 세계에서 자신을 갱신
Day5 스프라이트스프라이트(sprite)는 캐릭터나 배경 그리고 기타 동적인 물체를 나타내는데 사용되는 일반적인 2D게임상의 시작적 오브젝트이다. 2D 게임에서는 스프라이트가 널리 보급돼 사용되고 있으므로 가능한 한 효율적으로 스프라이트를 사용하는 것이 중요하다. 2
Day 6 배경 스프라이트 출력하기, 스프라이트 애니메이션 및 타일 맵(Exercise)2D 게임에서 종종 사용하는 트릭으로 스크롤되는 배경이 있다. 배경 스크롤은 세계가 커다랗다는 인상을 만들어 내며, 무한히 스크롤되는 게임에서 이 테크닉을 종종 사용한다. 배경을 스
Day 7 벡터와 MoveComonent, InputComponent의 구현 벡터 수학에서 벡터(vector)는 차원당 하나의 요소를 사용해서 n차원에서의 크기와 방향을 나타낸다. 2차원의 벡터는 x, y의 요소를 가지고 있다는 의미다. 게임 프로그래머에게 벡터는 가
Day 8 충돌 감지일부 게임에서는 실제 세계와 유사한 이동에 관해서 물리적으로 정확한 접근이 필요하다. 게임에서는 일반적으로 뉴턴 물리(고전 물리)를 사용한다. 물체가 빛의 속도에 근접할 정도로는 이동하지 않고 양자 입자보다 크다면 뉴턴 물리가 제대로 성립하기 때문이
Day 9 인공지능(1) 상태 기계 행위(State Machine Behaviors) 아주 간단한 게임에서는 AI는 항상 같은 행위를 한다. 예를 들어 2인용 퐁 게임에서 AI는 공이 움직일 때 공의 위치를 추적한다. 이 행위는 게임이 진행되는 동안 바뀌지 않지만
Day 10 인공지능(2) * $A^$ 탐색 ** GBFS의 단점은 GBFS가 최정의 경로를 보장해주지 않는 데 있다. 하지만 GBFS를 조금만 수정하면 $A^$ 탐색으로 변경하는 것이 가능하다. $A^$는 시작 노드에서 임의의 노드로의 실제 비용을 뜻하는 경로 비
Day 11 A\* 알고리즘을 이용한 길찾기가 적용된 타워 디펜스 게임 구현타워 디펜스 게임에서는 적이 왼쪽에 있는 시작 타일에서 오른쪽에 있는 마지막 타일로 이동하려 한다. 초기에 적들은 왼쪽에서 오른쪽으로 똑바로 이동한다. 하지만 플레이어는 격자상의 사각형에 탑을
Day12 SDL과 OpenGL 연결SDL 랜더러는 2D 그래픽을 지원하지만 3D 그래픽은 지원하지 않는다. 그래서 3D 그래픽으로 전환하려면 2D와 3D를 모두 지원하는 라이브러리로 전환해야한다. 그 라이브러리가 바로 OpenGL이다. OpenGL 윈도우 설정 Op
Day 13 스프라이트의 변환게임의 주변을 돌아다니는 10개의 운석이 있다고 하면 이 10개의 운석은 각각 다른 버텍스 배열 개체로 나타낼 수 있다. 이러한 버텍스 배열 개체는 화면상에서 운석을 다른 위치에 나타내기 위해 필요하며, 이는 각 운석을 그리기 위한 삼각형이
Day 14 텍스쳐 매핑과 알파 블랜딩텍스처 매핑(texture mapping)은 삼각형 표면에 텍스쳐(이미지)를 렌더링하는 것이다. 텍스쳐 매핑은 삼각형을 그릴 때 단색을 사용하는 대신에 텍스쳐의 색상을 사용 가능하게 해준다. 텍스처 매핑을 사용하기 위해서는 우선 이
Day 15 3D 그래픽스 - 오브젝트 그리기 3D에서 액터 변환 대부분의 2D 게임은 x가 수평 방향이고 y가 수직 방향인 좌표 시스템을 사용한다. 하지만 2D 좌표 체계에서도 +y는 위나 아래일 수 있으니 좌표 체계는 구현 방법에 의존한다고 볼 수 있다. 세 번
Day 16 조명, 퐁 반사와 퐁 셰이딩메시 프래그먼트 셰이더는 픽셀에 대한 최종 색상으로서 텍스처 색상을 직접 사용했다. 그러나 명암이 존재하지 않는다면 장면은 단조롭게 보인다. 태양이나 전구같은 컨셉트를 근사화하거나 장면에 간단한 다향성을 부여하려면 조명이 필요하다
Day 17 오디오가장 기본적인 오디오 시스템은 필요에 따라 WAV나 OGG 파일 같은 독립실행형 사운드 파일을 로드하고 재생한다. 이런 접근법은 간단한 2D 게임에서는 완벽히 수용되겠지만 이 정도로는 한계가 있다. 대부분 싱글 게임에서는 하나의 사운드 파일만을 가지고
Day 18 입력 시스템 입력 장치 게임이 키보드나 마우스 또는 다양한 입력 장치에 반응한다는 사실은 게임과 입력 장치가 상호작용이 가능함을 뜻한다. 게임 프로젝트에서 게임 루프의 '프로세스 입력' 단계 동안 입력 장치의 현재 상태를 가져온다. 그리고 이 현재 입력
Day 19 카메라 - 1인칭 카메라, 팔로우 카메라, 궤도 카메라, 스플라인 카메라1인칭 카메라(first-person camera)는 게임 세계상에서 움직이는 캐릭터의 시점에서 게임 세계를 보여준다. 이런 타임의 카메라는 FPS 게임이나 일부 RPG, 그리고 스토리
Day 20 충돌 감지의 기본 기하 타입 게임을 위한 충돌 감지에서는 기하나 선형대수 같은 여러 다양한 개념을 활용한다. 게임에서 사용되는 일반적인 기하 타입으로는 선분, 평면, 박스 등이 있다. * 선분 * 선분(line segment)은 시작 지점과 끝 지점
Day 21 충돌 적용하기 BoxComponent 클래스 BoxComponent의 선언은 다른 컴포넌트와 다를 것이 없지만 Update함수를 재정의하는 대신 OnUpdateWorldTransform 함수를 재정의 한다. 소유자 액터는 세계 변환을 재정의할때마다 Box