게임프로그래머가 되기위해 4 본문

Programming/프로그래밍 일반

게임프로그래머가 되기위해 4

쩡호 2017. 4. 13. 12:48

4. 가장 많이 쓰이는 게임 개발 SDK "Direct X"
 
게임을 만들기 위한 첫번째 단추
 
C++까지 공부했다면, 이제는 윈도우 프로그래밍을 공부할때다. 만약 Win32 API 까지 공부했다면 DirectX 를 '볼'때다
 
비디오 게임중 가장 쉽고 단시간에 제작 할수 있는게 무엇이냐고 묻는다면 윈도우를 기반으로한 PC 게임이다. 많은 이들이 컴퓨터를 가지고 있기때문도 있지만, 그 이유에는 Win32 API 와 DirectX 가 있기 때문이다.
 
꾸준하게 프로그래밍과 컴퓨터 시스템에 대해서 공부하는것도 하나의 방법이지만 실제로 게임을 만들어보면서 공부하는것도 좋은 방법이라고 생각할때, 이 시점에서 작은 게임을 만들수 있는 상황을 만드는 것은 적절하다.
 
Win32 API란 무엇인가?
 
API 란 Application Programming Interface다. 그런까 Win32 API 란 말은 윈도우 위에서 돌아가는 프로그램을 만들기 위한 인터페이스라는것이다.
 
인터페이스란 쉽게 말하면 함수들의 집합이며 좀더 정확하게 말한다면 그 함수들을 이용한 프로그래밍 방법이다.
 
즉 이것을 모르면 윈도우 위에서 프로그래밍 하기가 매우 어려워진다. 특히 전혀 모르고서는 윈도우용 어플리케이션을 만들수 없다고 생각하면 맞다.
 
그렇기 때문에 우선 DirectX를 공부하려면 Win32 API를 알아야 한다.(기본적인것들이라도)
 
그렇다고 너무 심각할정도의 많은 지식은 필요로 하지 않는다. 많이 알고 있으면 좋지만 실제로 게임에서는 Win32 API로 할수 없어서 직접 손수 만들어야 하는 많은것들이 있다.
 
Win32 API 어떻게, 무얼 공부해야 하나?
 
우선 API를 배울때는 마음가짐이 중요하다. 새로운것을 '연구한다'. 라는 마음가짐으로 API에 접근하는 방법은 좋지 못하다.
 
"API에 있는 함수들을 찾아서 사용한다." 라는 느낌으로 보면된다. 사실 C에서 API로 넘어가는것은 함수들에 대한 이해와 윈도우 시스템에 대한 이해만 하면 모든것이 끝난다. 어떤 진일보한 시스템이나 그런것들은 없다.
 
기본적으로 API 에서 배울것은 윈도우 메세지 시스템과 윈도우에 GDI 의 사용법, 특이한 윈도우용 해더, 함수, 변수를 익숙해지는것 뿐이다.
 
좋은 방법은 기본적인 MFC책도 좋고, API 책들 부분의 Keyboard Input과 윈도우에 그림그리는 법을 (bitmap 띄우는법) 익히는것이다. 책은 국내에 API 책들이 그렇게 많지 않으나, 'API 정복- 가남사'를 추천한다.
 
엄청나게 두꺼운데다 글씨는 따닥 따닥 붙어있어서 사실 비추천할만한 책이지만 한국에는 API 책이 없다. 대표적인 책으로  '페이촐트'의 윈도우 프로그래밍보다는 더 좋은듯 싶다.
 
어짜피 다 읽을 책이 아니기 때문에 겁먹지 말고 "필요한 부분을 찾아서 본다." 라고 생각하면 된다.
 
API를 할때 한가지 더 해볼만한것이 있는데 그것은 Bitmap File 분석이다. Bitmap File은 게임에서 많이 사용될뿐 아니라 나름대로 복잡한 File System을 가지고 있기 때문에 분석해볼만하다.
 
특히 게임에서는 보안성등을 위해 자신만의 이미지 파일을 만들어내기도 하니 더욱 그렇하다.
 
Bitmap에 대한 상세한 내용은 MSDN이나 곧곧에 널리고 널렸다. (찾아봐라. 무책임하군-_-;)
 
필자는 Bitmap 분석할때 MSDN의 BITMAP을 가지고 Search 한후 열라 찾아봤다.
 
찾다 보면 정말로 많은 정보들이 나온다 (그것도 영어로!). 스스로 정리해내는데 꽤 어렵겠지만 Bitmap 데이터를 스스로 fopen()등 File Stream을 이용해서 열고 그것을 GDI에 접합시키는 공부을 하면 GDI의 대략적인 움직임과 실제 큰 데이터 파일에 대한 대략적인 구조등을 알수 있다.
 
DirectX란 무엇인가?
 
DirectX가 만들어지게 된 이유는 우선 윈도우 시스템에서 게임을 만들기에는 GDI(Graphic Device Interface)가 너무 느렸다.
 
또한 윈도우에서 기본적으로 지원해주는 Keyboard Input - Windows Massage 역시 너무 느리고 원하는 데이터를 정확히 얻을수가 없었다.
 
이것들을 손쉽게 좀더 빠르게 접근하고, 좀더 정확하게 접근하기위해서 SDK(Software Development Kit)를 제작하게 되는데, 위에 기능들에 게임에 필수적으로 들어가는 게임 음악이나 비디오 부분 또 점차 영향력을 확장하는 네트워크 부분까지 모두 한번에 모아놓은것이 DirectX 이다.
 
통상적으로 SDK라고 하는것은 일종의 라이브러리 라는것이다. 라이브러리라 함은 함수들의 집합이라고 감히 말할수 있고, DirectX 역시나 연구해야 할 대상은 아니다.
 
DirectX 자체에는 연구할 내용이 없고 볼수 있다. 연구한 내용을 손쉽게 적용시키면 되는것 뿐이다.
 
무엇을 어떻게 공부해야 하나?
 
프로그래밍을 하다보면 3D나 2D나 많은 지식들이 필요로 한다. 2D라면 이미지 프로세싱에대한 지식이 필요로 할것이고, 3D 라면 3D에 관한 지식이 필요로 한다. DirectX에는 이런 지식들은 자세히 나와있지 않다. 위에 것들을 실제로 표현해 내기 위해서 단개별로 나눈 함수들이 있을뿐이다.
 
DirectX 중 Graphic 을 처리하는 2D와 3D부분중 어떤것을 먼저 할것이냐? 라고 묻는다면 그것은 개인의 자유이다. 2D도 3D도 어짜피 해야 하는 부분이기 때문이다.
 
양쪽의 장단점을 말해보자.
 
DirectX 구버전(7.0)을 이용해 2D를 할수 있다. 이것을 Direct Draw(DDraw 이하)라고 한다.
 
DDraws는 기본적으로 위에서 만든 Bitmap에대한 처리를 실제로 DirectX에서 이용해볼수 있고, 또 나중에 스스로 알파블렌딩등을 구현해보기 쉽기 때문이다. 또 처음 접근이 용의하고 이미지를 띄우기 가장 쉽다.
 
반면 2D쪽은 너무 많은것을 직접 구현해야 하기때문에 뒤로 가면 갈수록 피곤하다. 3D 프로그래밍을 할때 DirectX를 다시 배워야 하는 난점이 있다.
 
DirectX 8.0 이상부터는 DDraw가 사라지고 Direct Graphic을 가지게 되었다. Direct Graphic은 쉽게 말하면 Direct 3D(이하 D3D)이다.
 
3D를 가지고 2D를 하는것도 무리가 없다. 실제 3D란 2D지만 우리 눈이 3D라고 느낄 뿐이기 때문이다.
 
D3D를 가지고 2D 프로그래밍을 해보는것도 좋은 방법이다. 대부분의 것들이 자동으로 된다는것이 알고리즘을 공부하는데 나쁘고,  처음에 익숙해지기 난해 하지만, 후에 여러가지 기술들이나 속도면 등에서 점점 편해진다. 또 3D쪽을 공부할때 기본적인 트렌스폼을 알기때문에 3D쪽을 이해하는대도 편하다.
 
처음 부터 3D를 공부하는것도 하나의 방법이다.
 
3D 프로그래밍에 익숙해지기 가장 좋은 방법이기때문이다. 그렇지만 처음에 접근하기는 어려운 감이 있고 결정적으로 게임을 만들때 들어가는 메쉬(3D오브젝트)와 텍스쳐를 구하기 어렵다. (그에 비해 2D 스프라이트는 구하기 쉽다.)
 
3가지중 무엇을 선택하느냐는 자기가 처음 만들어 보고 싶은 게임이 무엇이냐에 따랐다고 할수 있다. 그중 나에게 추천을 정 하라면 시간이 많고 여유가 있는 사람은 7.0을 이용한 2D부터 천천히 해보는것이 좋을것이고, 빨리 게임을 만들고 싶은 사람이라면 8.0 이상 버젼을 이용한 2D부터 해보는것이 좋을듯 싶다.
 
DirectX 는 어떤책이 가장 좋은가? 라고 한다면 책은 하나도 중요하지 않다. 실제로 시중에 나와있는 책들중에 DirecX 책들이 엄청나게 많은대 그리 추천할만한 책은 없다.(왜냐면 돈이 아깝다!)
 
가장 최고의 자료는 기본적으로 제공하는 소스 샘플을 분적하는 것이다.
 
DirectX 의 경우 함수 이름들도 굉장히 직관적이고, 내용들도 모두 도움말에 잘 나와있다. 그렇기 때문에 손쉽게 접근할수 있을것이다. 만약 정 영어에 딸리고 한다면 아무 책이나 사도 좋으나 최대한 함수와 그에 대한 이용법이 많이 나와있는 책이 좋다.
 
물론 3D 책(3D 적인 지식)이나 2D 책(이미지 프로세싱)이 있는 책역시 필요하지 않다는것은 아니다. 이때는 책이 필요하다.
 
소스 샘플중에서는 8.0 이상에서는 3D쪽은 튜토리얼을 분석후 프레임 워크를 분석해보는게 좋다. 2D쪽에서는 튜토리얼 정도만 분석해도 좋을것 이다.
 
3D와 8.0 이상을 이용한 2D는 http://www.gamza.net 에 좋은 내용들이 많이 있다.
 
또 3D에 대한 많은 내용은 http://www.spirit3d.net/ 에 좋은 도큐먼드들이 많이 이 있으며 도움말 한글판도 있다..(번역기로 밀어놓은것이지만 나름대로 영어에 힘이 드는 사람은 좋은 도큐먼트가 된다. )
 
Direct Input 이라던지 Direct Show, Direct Sound, Direct Network 역시 예제들을 보고 익숙해지면 된다.
 
대략적인 DirectX를 기본적으로 알게되고, Bitmap을 잘라서 올릴수 있고, 투명화 정도면 표현할수 있다면, 그때부터는 게임을 만들기 시작할수 있다.
 
어떤 게임을 만들것이냐?
 
그럼 어떤 게임을 만들것이냐? 나의 추천으로는 '알카노이드'(긴 바가 공으로 벽돌을 깨는 게임)가 좋을듯 싶다.
 
게임 제작에 슈팅보다도 쉽지만 간단한 사각형 충돌검사를 가능하게 할 수 있다. 특정한 툴이 반드시 필요하지도 않기 때문에 쉽게 제작할수 있다.
 
물론 알카노이드는 나의 추천이다. 단지 처음 게임을 만들때 '툴' 이 있어야 만들수 있는 게임(롤플레잉, 미연시, 어드벤쳐)등은 지양했으면 한다. 혼자서 툴을 만들고 툴의 데이터까지 만든다는것은 굉장한 피로감을 주고 그 피로감은 굉장히 크고 잘못하다가는 게임을 완성시키지 못할수 있다.
 
또한 게임의 플레이 부분만 중요시하는것은 지양해야 한다. 게임을 제작할때는 완벽한 게임을 추구해야 한다. 완벽한 게임이란 일반적인 '중요 단계'뿐 아니라  처음 매뉴와 게임 효과음 등이 필요하다.  그리고 당연히 게임을 만들때는 OOP로 만들어야 한다. (이것은 일종의 연습이다.)
Comments