기본 디바이스 생성하기.
일단... Direct 3D를 사용 하기 위해서는... Visual Stdio (꼭은 아니지만..) 말고...
Direct X SDK 가 필요하다. 현제 최신버전이 DX9.0c 이니...
Direct X SDK 9.0을 받아도 무관하지만... DX 같은경우, 2달인가 3달마다... 새로운 버전이 나오기때문에
그것을 받아서 설치 할 경우 최근에 변화된 기술을 바로 적용 시킬수 있다.
다운로드는 Microsoft.com에서나... 그외에 다른곳에도 있다. ( 마소홈에서 받을땐... 정품인증 안되면 못 받는다. )
다운로드를 받아서 설치를 해준경우 Include와 lib 디렉토리가 사용 할 수 있게 Visual Stdio에 등록이 되어 있는지 확인한다.
VS.NET 2003 같은경우 메뉴에서.. 도구-옵션-프로젝트-VC디렉토리 에서, 포함이 되어 있어야 한다.

포함(include)파일에는 Direct X SDK 설치폴더의 include를 지정해주면 되고,
라이브러리(lib)파일에는 Direct X SDK 설치폴더의 lib를 지정해주면 된다.
2. 코드안에서의 준비
기본적으로... Direct 3D도 라이브러리 이기 때문에 lib과 *.h 파일을 포함해야 사용이 가능하다.
일단 기본적으로
는 포함을 한다. ( 추후에 어떤것을 사용 하는것에 따라 추가로 해더를 포함 할 수도 있다.)
또한 여기서 사용하는 lib 파일을 포함 해야 하는데...
VS(비주얼스트디오)에서는 두가지 방법을 지원한다.
* 첫번째, 프로젝트에 포함하는 방법.
이 방법은 솔루션 탐색기 안의 프로젝트를 선택한 후에 마우스 우 클릭 후 '속성'을 선택한다. (단축기 알트+p+p)

위와 같이 링커(Linker)-입력(Input)-추가종속성(Depend Lib?)을 선택 한 후에 안에 아래와 같이 입력한다.
d3dxof.lib dxguid.lib d3d9.lib d3dx9d.lib winmm.lib
일단은.. D3D를 이용한 프로그램은 무조건 필요하다고 생각하고 넣어주기 바란다.
각각의 라이브러리 파일들이 어떤 것 때문에 필요한것인지를 알고 싶다면... 설치된 SDK 안에 문서를 보고 찾아보면 나온다.
* 두번째, 전처리 명령어를 이용하는 방법.
위에서 입력한 라이브러리를 해당소스 파일에다가 이렇게 입력이 가능하다.
이와 같이 모든 라이브러리를 입력해주면... 사용자가 만든 소스를 사용 하는 경우 프로젝트의 속성을 통한 라이브러리를 추가해 줄 필요가 없게 된다.
전처리에 대한 것은 msdn에 자세히 나와 있으니 참조하기 바람.
3. D3D 디바이스 생성하기.
위의 함수 처럼 간단히 3디 객체를 만들고, 그 객체를 통해서 3디 디바이스를 생성한다.
3디 디바이스를 만들때 아래의 구조체를 사용해서, 우리가 원하는 형태의 디바이스를 생성한다.
원형은 아래와 같다. 자세한 설명은 msdn 문서를 참조.
4. 렌더링
이번에는 디바이스를 생성하였으니.. 화면에 보이도록 렌더링을 하는 차례이다.
디바이스가 유효한지 검사한 후에 화면을 지우고, 렌더링을 시작한다. 렌더링이 끝난 후에는 화면에 출력을 한다.
여기서 보면, 후면 버퍼라고 했는데...
일단, Direct 3D는 기본적으로 '더블버퍼링'을 사용한다.
간단하게 예를 들어 이미지를 화면에 출력하는 것을 생각하면...
비트맵을 메모리에 로딩한다. -> 화면에 출력한다.
그런데 만약에 출력해야할 이미지가 한장이 아니고 3장을 동시에 보여줘야 한다면 어떨까?
비트맵을 메모리에 로딩한다. -> 화면에 출력한다. -> 비트맵을 메모리에 로딩한다. -> 화면에 출력한다. -> 비트맵을 메모리에 로딩한다. -> 화면에 출력한다. 내지는...
비트맵을 메모리에 로딩한다. -> 비트맵을 메모리에 로딩한다. -> 비트맵을 메모리에 로딩한다. -> 화면에 출력한다. -> 화면에 출력한다. -> 화면에 출력한다.
이다. 이 과정에서 여러 이미지를 출력해본 경험이 있다면, 화면이 깜빡이는 현상을 느낄 수 있었을 것이다.

원리는 위의 그림과 같다. ( 왼쪽 - 일반 이미지 출력, 오른쪽 - 더블버퍼링을 사용한 출력 )
결론적으로 말하면,
더블버퍼링을 사용 했을 경우... 깜빡이는 현상을 없앨 수 있다는 이점을 가지고 올 수 있다.
렌더링을 할 경우, 반드시 BeginScene() 과 EndScene() 안에서 작업을 끝내야한다.
예를 들어서 텍스처(이미지)를 화면에 출력 하고자 하는 과정도 다 위의 함수들 사이에서 끝내야한다.
5. 끝.
지금까지 간단하게... 3디객체를 만들어서 3디 디바이스를 생성하고, 화면을 지우는 것 까지를 해봤는데...
간단하게 보이면서도 무지 복잡해 보이는 작업이다.
사용자를 극히 제한 해버리면, 모르지만... 그렇지 않을 경우, 사용자가 가지고 있는 그래픽 카드에 대해서 가속등등을 지원하는지 안하는지 검사를 하여 그에 맞게 디바이스를 생성해야 하기 때문이다.
6. 사용된 코드 (DXSDK 9.0 튜토리얼 1번코드임)
2006년 초에 다른곳에 썼었던 글을 옮겨온 것임.



댓글을 달아 주세요
반갑지?ㅋㅋㅋ