항상 내용이 이해 안되다가 어디 잘설명한 곳이 없나 고민하던차에 검색해서 찾았다.
중간에 나오는 LOGFONT는 D3DXFONT_DESC로 변경되었다는점만 빼곤 적당히 잘 설명되어졌다.
특히나 폰트 사이즈가 자동으로 계산되는것이 참 유용하다.
구현한 파일을 올린다.
//////////////////////////////////////////////////////////////////////////////////
참조한곳 :
http://www.activehelix.com/files/programming3/P3_Tutorial5_4.pdf
//////////////////////////////////////////////////////////////////////////////////
번역
--------------
-글자 출력
--------------
어떤 글자라도 출력이 가능하지만 순서가 조금 어렵다.
*단순히 택스트 박스가 종종 더 좋을 때가 있다.
순서는 이렇다.
1. ID3DXFont 오브젝트 생성
2. 옵션) 글자 출력 사각범위 계산
3. D3D장치의 BeginScene()을 호출
4. 글자를 그림
5. D3D장치의 EndScene()을 호출
6. 폰트 오브젝트 제거
(1) 폰트 생성
일단 ID3DXFont 오브젝트의 포인터를 선언한다.
예) LPD3DXFONT g_pFont = NULL;
이후에 2가지 방법중 하나로 폰트를 생성한다. 물론 2가지 방법은 win32에서 가능하다.
방법1)
HFONT CreateFont( 블라블라 등등등 )
예)
HFONT hFont;
hFont = CreateFont( nHeight, 0, 0, 0, FW_BOLD, false, false, false,
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_DONTCARE, NULL );
역자주) WinApi함수 이다.
여기서 생성된 폰트오브젝트는 아래 함수에서 사용된다.
HRESULT D3DXCreateFont( hFont, *ppFont );
예)
LPD3DXFONT pd3dxFontNew = NULL;
HRESULT hr;
hr = D3DXCreateFont( g_pd3dDevice, hFont, &pd3dxFontNew );
방법2)
LogFont 구조체에 정보를 채워서 초기화한다.
LogFont는 폰트의 속성을 모아놓은 구조체다.
만약 24크기의 Arial 폰트를 만들고 싶다면,
LOGFONT LogFont = {24, 0, 0, 0, FW_NORMAL, false, false, false,
DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
PROOF_QUALITY, DEFAULT_PITCH, “Arial”};
이렇게,
이후에 ID3DXFont 오브젝트를 생성하기 위해 D3DXCreateIndirect함수를 호출한다.
HRESULT D3DXCreateFontIndirect( pDevice, *pLogFont, *ppFont );
예)
LPD3DXFONT pd3dxFontNew = NULL;
HRESULT hr;
hr = D3DXCreateFontIndirect( g_pd3dDevice, &LogFont, &pd3dxFontNew );
(2) 택스트 사각형 계산
문자열을 출력하는 화면의 크기를 결정해야한다. 이것을 위한 몇몇 옵션이 존재하는대,
ID3DXFont 오브젝트에 DT_CALCRECT 옵션을 주자. 그러면 더이상 사각형 사이즈는 필요없다.
아니면, 사각형의 크기를 표현하고, 다른 옵션을 주어야한다. DT_CENTER 같이 가운대 정렬말이다.
어쨋든 사각형을 뜻하는 구조체 RECT에 크기 정보가 계산되어져 들어갈것이다.
RECT r;
(3) 문자열 화면에 그리기
DrawText( - );
예) pFont -> DrawText(pstrMsg, -1, &r, DT_CALCRECT, 0xff00000);
pFont->DrawText( "COLLISION", -1, &textRect, DT_CENTER, D3DCOLOR_ARGB(255, 255, 0, 0) );
-자동으로 문자열 사각형 위치 얻기
만약에 DT_CALCRECT 옵션을 주면, RECT구조체에 출력된 문자열의 위치 정보가 들어간다.
left,top정보는 먼저 선언한대로 들어가며, bottom,right정보는 글자크기에 맞게 계산되어져서
들어간다. 이후에 width과 height를 얻을 수 있다.
이런 정보로 화면가운대에 글자를 출력할 수 있다.
'게임프로그래밍 공부' 카테고리의 다른 글
| OBJ포맷 정리 및 로더 제작시 유의사항 (0) | 2015.08.04 |
|---|---|
| 소리및 영상을 넣기 위한 윈도우 인터페이스 MCI ( Media Control Interface ) (0) | 2014.07.05 |
| 데이터 베이스 관련 함수 정리.. (0) | 2014.01.04 |
| 게임내 체팅을 위한 출력 폼 (0) | 2014.01.03 |
| 앞으로 만들 게임을 위한 클래스 요구사항 디자인 (0) | 2013.12.11 |