아래에서 퍼옴
http://includes.egloos.com/1482679
GDI 의 DrawText 같은 텍스트 출력 API 들은 우선 그 출력 품질이 좋지 못하고 특정크기 이하에서는 anti-aliasing 이 적용되지 않는다. (워드패드에서 12pt 크기의 글자와 40pt 글자의 품질을 비교해 보시라..) 무엇보다 DC 엑세스는 느리다!! 해서 어제는 난데없이 FreeType 라이브러리를 게임에 붙이는 작업을 했었다. 튜토리얼이 잘 되어 있에서 별 무리 없이 끝나긴 했지만 덕분에 알게 된 사실 한가지.
ttf 폰트는 저마다 인코딩 타입이 다르다. 완성형으로 되어 있는 폰트도 있고 유니코드로 되어 있는 폰트도 있다. 폰트쪽에 영 관심이 없다 보니 오늘 첨 알았다. -_-;;; 어쨌든 FreeType 은 glyph index(해당 글자의 인덱스) 를 넘겨주고 이미지를 넘겨받는 식인데 가장 해피한 경우는 "유니코드 ttf 폰트" 일 경우다. 이건 그냥 유니코드를 넘겨주면 글자 이미지가 튀어 나온다.
하지만 "완성형 ttf 폰트" 에서는 작업이 좀 골때리게 된다. 영문같은 경우에는 그냥 ASCII 코드를 넘겨주면 되지만 완성형 한글같은 경우 한글 2byte 한글자의 인덱스를 넘겨줘야 한다. 인덱스라 함은 완성형 한글 2 byte 를 하나의 숫자, 그것도 big-endian 으로 바꾼것을 의미한다. 간략하게 유니코드 한자에서 glyph index 를 얻어내는 코드를 살펴보자.
wcahr_t *szString = L"한글입니다~";
for( size_t n = 0; n < len; ++n )
{
// 한글인경우
if( szString[n] >= 0xAC00 && code_point <= 0xD743 )
{
// 우선 해당 유니코드 글자를 완성형으로 바꾼다.
WideCharToMultiByte( 949, 0, &szString[n], 1, (LPSTR)&code, sizeof(code), "*", NULL ); // byte order 를 뒤집어 준다. -_-;
code = htons( code );
}
glyph_index = FT_Get_Char_Index( face, code );
}
예제 코드는 Win32 API 를 사용했지만 Unicode -> KSC-5601 변환 코드가 있다면 어느것을 써도 무방하다. 참고로 조합형 폰트가 없으리란 법은 없기에 face 의 인코딩 타입을 살펴보고 코드페이지를 적절히 바꿔 주어야 한다.
덧. FreeType 2.1.10 을 C++ 에서 사용시 LNK2001 : _otv_module_class 에러가 나는경우 해결책
if( szString[n] >= 0xAC00 && code_point <= 0xD743 )
{
// 우선 해당 유니코드 글자를 완성형으로 바꾼다.
WideCharToMultiByte( 949, 0, &szString[n], 1, (LPSTR)&code, sizeof(code), "*", NULL ); // byte order 를 뒤집어 준다. -_-;
code = htons( code );
}
glyph_index = FT_Get_Char_Index( face, code );
}
예제 코드는 Win32 API 를 사용했지만 Unicode -> KSC-5601 변환 코드가 있다면 어느것을 써도 무방하다. 참고로 조합형 폰트가 없으리란 법은 없기에 face 의 인코딩 타입을 살펴보고 코드페이지를 적절히 바꿔 주어야 한다.
덧. FreeType 2.1.10 을 C++ 에서 사용시 LNK2001 : _otv_module_class 에러가 나는경우 해결책
제작자 아저씨는 아래와 같이 얘기하고 있다. -_-
the 'otvalid' module cannot be compiled as found in 2.1.10 because we're using legal C preprocessing tricks that are not supported by the Visual C++ compiler.
from http://www.mail-archive.com/freetype-devel@nongnu.org/msg00219.html
from http://www.mail-archive.com/freetype-devel@nongnu.org/msg00219.html
본인은 그래서 해당 모듈을 제거해 버리고 썼다. -_-;;;
===================
본인도 제거하고 썼다... -ㅡ..
음 ? 나두 제거하고 ? ㅋㅋ
음 ? 나두 제거하고 ? ㅋㅋ
'게임 개발' 카테고리의 다른 글
멀티코어 컴파일 옵션 (0) | 2010.03.18 |
---|---|
존카맥의 멀티코어 프로그래밍에 대한 의견 (0) | 2010.03.18 |
FreeType2 개요 번역 (0) | 2010.03.17 |
Scaleform GFx 분석 (0) | 2010.03.17 |
은, 는, 이, 가 알아내기 44032 (0) | 2010.03.17 |