ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ID3DXFont 사용하여 문자 출력하기
    Programing/DirectX 2008. 5. 19. 16:20

    다이렉트 디바이스에 문자 출력시키는 순서를 알아보자.

    1. 먼저 텍스트를 그리는데 사용할수 있는 인터페이스를 만들어 보자.

    ID3DXFont*         myfont1 = NULL;

    ID3DXFont는 CDI를 이용하여 약간의 성능저하는 있지만 복잡한 글꼴이나 포맷팅이 가능하다.



    2. 인터페이스를 사용하여 폰트를 만들어야 한다.

    D3DXCreateFont() 함수는 장치와 폰트용의 폰트 개체를 만들어준다.

    HRESULT D3DXCreateFont(
      LPDIRECT3DDEVICE9 pDevice,
      INT Height,
      UINT Width,
      UINT Weight,
      UINT MipLevels,
      BOOL Italic,
      DWORD CharSet,
      DWORD OutputPrecision,
      DWORD Quality,
      DWORD PitchAndFamily,
      LPCTSTR pFacename,
      LPD3DXFONT * ppFont
    );
    총 13개의 인자가 있는데....
    첫번째 인자는 연결할 장치, 중간의 인자들은 폰트 개체핸들의 속성값들 , 마지막 인자는  폰트 인터페이스이다.(SDK April 2007 버젼)
    우선 LPCTSTR 한놈을 만들고 저 함수를 사용하여 생성하면 되는 것이다.
    이외에도 D3DXCreateFontIndirect() 함수를 사용할 수 있다.


    3. 이제 폰트를 출력하자

    DrawText() 함수를 사용하여 위에서 생성된 폰트를 화면에 그려줄수 있게 된다.

    INT DrawText(      

        LPCSTR pString,    INT Count,    LPRECT pRect,    DWORD Format,    D3DCOLOR Color );

    첫번째 인자는 출력할 문자, 두번째는 문자의 수, 세번째는 화면영역, 네번째는 텍스트포맷플래그조합, 다섯번째는 컬러값을 인자로 한다.


    아래는 DXUT를 이용한 기본 EmptyProject 에서 위의 코드들을 삽입하여 간단한 문자를 출력한 결과이다.

    사용자 삽입 이미지

    ps. 참고로 위의 텍스트 출력으로 초당 프레임수를 출력해보다가 기록해 둬야 할 사실이 생겼다.
    DXUT의 유니코드문자 사용에 관한 문제인데  아래와 같이 해결했다. 기록해두자.

    float FPS              = 0.0f;
    wchar_t FPSString[128];

    StringCchCopy( g_strFont, 32, L"Arial" );
     FPS = DXUTGetFPS();
     swprintf(FPSString, 128, L"%f frame", FPS);
Designed by Tistory.