폰트 관련 자료를 찾다 발견한 글이다.
함수 사용법 등의 자료는 너무 많은데...
GDI 와 DirectX 의 관계를 알고 싶었다.
한번 쭉 읽어보니 영어를 번역한 글이다.
역시 영어를 공부 해야하나... 해외 사이트에는 정말 좋은 글이 많은데... ㅠㅠ
Direct3D 8으로 옮겨가는 DirectDraw 프로그래머들을 위해서, 나는 항상 “blit 함수는 어디에 있나?”라는 첫번째 질문을 강조한다. 우리 화제가 덮어져 있다. 그러나 두번째 질문, 보통 대부분 DirectX 7에서 “사용하기 위한 GDI 함수들을 어떻게 해서 얻어 오는가?”, 프로그래머들은 GDI DC(장치 환경-Device context) 핸들을 얻어올 것이고, 그리고 나서 Win32 GDI 명령어들을 서피스에서 직접 사용할 것이다. GDI는 일반적으로 느린데, 많은 상태에서(특히, 실행 속도에 큰 문제가 되지 않는) GDI는 많은 기본적인 그래픽을 취급하는 매우 강한 함수들을 제공한다. 프로그래머들을 제거에서 생성된 루틴의 많은 영향으로부터 구해준다. 만약 아무것도 안한다면, GDI 루틴은 견본(프로토타입)을 개발하는 동안 사용될 것이다. 사용자가 후에 루틴을 최적화 함으로써 대체될 것이다. Direct3D 8에서, 옵션은 죽었다. 더 이상 프라이머리 서피스에서 DC를 취급해서 얻오는 것은 “법률상” 가능하지가 않다. 그리고 스크린에서 GDI명령어들 역시 가능하지가 않다. 이것에 대한 2가지 해결책이 여기에 있다.
첫번째, 당신은 CreateCompatibleDC/ CreateCompatibleBitmap() 조합의 오프스크린 비트맵 서피스를 생성할 수 있다. 이 비트맵에서의 당신의 GDI명령어들로, 텍스쳐로 된 비트맵 데이터복사 한다. 그러면 당신은 스크린에 그릴수가 있게 된다.
두번째, 당신은 GDI 명령어를 새로운 사용자 버전으로 대체 할 수 있다.
그래픽에서, 두개의 가장 중요한 공통인 GDI의 사용은 사각형을 그리는 것과(채우거나 비우거나) 그리고 글자를 그리는 것을 나타내는 것이다. Listing 5안에서, 나는 비트를 속이고 그리고 사각형을 채우거나 비우는 것을 구현한 Direct3D 8 Clear() 함수의 특징을 사용한 기본적인 사각형 루틴을 제공했다. 문서에서 서피스를 지운다는 함축적인 의미의 Clear()의 사용에 대해서 중심적으로 지적했다. 그러나 그 이후 당신은 지울 위치와, 색을 지정할 수 있다. 이것은 또한 좋은 일반적인 목적의 사각형 채우기를 만들 수 있다. DDBLT_COLORFILL 플래그와 함께하는 DirectX 7 Blt()의 특징을 복사한다. Clear() 함수는 사용 가능한 하드웨어 가속을 사용하게 할 수 있다. 그것은 어떠한 폭력 픽셀 루틴보다 훨씬 좋은 선택을 만들게 된다. 환전히 3D의 어플리케이션을 위해서, 이것을 하는 더 좋은 방법이 있다. 그러나 우리의 목적은 이 정도가 충분하다.
문자를 위해서, D3DX 라이브러리는 ID3DXSprite 인터페이스의 비슷한 방법의 일에서 ID3DXFont 인터페이스를 우리에게 제공한다. 당신은 표준적인 GDI 폰트 핸들(HFONT)인 D3DXCreateFont() 함수의 통과가 필요하다. 그리고 돌아가서 당신은 하나의 메인 함수인 DrawText()가 가진 ID3DXFont 인터페이스의 포인터를 얻는다. 이 함수는 대부분의 비슷한 파라미터로된 GDI의 DrawTextEx()와 매우 비슷하게 따라한다. 사실은 DirectX 8 SDK는 이러한 함수로부터 값을 되돌리는 문서상의 에러를 가지고 있다. 그리고 확실한 값을 돌려주는 GDI함수에서와 같다. – 돌려주는 값은 그려진 문자의 문자 높이이다. 시각적인 질과 이 함수가 우수하다는 것으로부터 문자 출력의 자간이다. 그리고 아주 많은 포멧팅 옵션이 있다. 그러나 약점은 속도이다. 후드 안에서, ID3DXFont:DrawText() 함수는 확실히 위쪽을 검토하는 것이다. GDI-호환성 비트맵을 생성하고, 문자를 비트맵에 그리고, 그리고 나서 텍스쳐인 비트맵를 복사하고, 그리고 스크린에 텍스쳐를 랜더한다. 그래서 당신은 모든 근본적인 GDI 함수의 느린 것과 많은 오버헤드의 결합된 것을 얻게 된다. – 마지막으로, 이 함수는 원본 GDI DrawTextEx()보다 6배 이상 정도 느리다.
DirectX 8 SDK는 이것을 해결하기 위해 제공하는 샘플을 제공한다. – “3D 텍스트” 샘플 프로그램은 텍스트 해법에서 좀더 확고함이 적지만 더 빠른게 구현이 되는 CD3DFont라 불리는 클래스를 정의했다. 그것은 단지 이용가능한 캐릭터들의 원판 텍스쳐를 생성하기 위한 초기화 하는 시간에서 GDI를 사용한다. 그런 후 텍스처로부터 각각의 개인적인 캐릭터를 그리는데에 사용이 된다. GDI라고 불리는 것이 더 이상 요구되지 않는다. 당신은 폰터 커닝과 포맷팅 옵션과 같은 좀더 좋은 특징에 졌다. 그러나 당신은 항상 당신이 필요할 때 CD3DFont 루틴을 사용자에 맞춰 할 수 있다.
[출처] [번역] 3D 세계에서의 2D프로그래밍 (3)|작성자 냐옹군
'비공개' 카테고리의 다른 글
Syntax High Lighter 세팅 / 사용법 (0) | 2010.04.08 |
---|---|
FreeType Font library (0) | 2010.04.07 |
현재 윈도우 OS 정보 가져오기 (0) | 2010.03.30 |
Dos Tree 명령어 (0) | 2010.03.29 |
폰트 (0) | 2010.03.23 |