FreeType을 이용한 Font 처리

FreeType의 주된 용도는 Anti-Aliasing 처리가 된 세련된 폰트의 출력에 있습니다. FreeType은 Windows는 물론이고, Linux나 MacOS에서 특히 더 많이 사용되고 있는 오픈소스 라이브러리입니다. 3D에서 한글출력을 위해 FreeType을 사용하는데, 류광님의 주도하에 개발된 glan이라는 한글출력 라이브러리도 안티알리아싱 처리된 문자의 출력을 위해서 FreeType을 활용하고 있는 것으로 알고 있습니다. OpenGL에서 한글출력을 고민하고 계시다면 반드시 glan에 관심을 가져보시길 바랍니다.

저 역시 FreeType에 관심을 가지게 된 이유도 3D에서의 한글출력 문제 때문이였습니다. 하지만 기존의 한글출력 방식은 하나의 이미지에 한글을 그려 놓고, 출력하고자 하는 문자을 텍스쳐 맵핑 방식으로 출력하는 방법을 사용합니다. 장점은 속도가 무척 빠르기 때문에 게임에서 주로 사용됩니다. 하지만 단점은 큰 크기의 한글을 출력하고자 할때 텍스쳐 이미지가 그에 따라 확대되어 커지게 되므로 뭉개지는 결과가 발생하게 되고, 다양한 한글 폰트를 사용하기 위해서 그 다양한 한글 폰트의 종류만큼 한글 맵핑 이미지를 미리 생성해 놓아야 합니다.


그러나 어찌되었든지 게임이라는 장르에서는 한글을 크게 출력할 필요가 없고 다양한 폰트를 사용할 필요가 없기때문에 이러한 단점이 문제가 되지 않습니다. 그러나 게임이 아닌 경우에 다양한 한글 포트와 한글의 크기에 상관없이 미려한 한글 출력을 원할 경우에 다른 방법은 없을지 고민이였습니다.

쉽게 생각할 수 있는 것이 한글을 구성하는 좌표를 구해서 Mesh 형태로 뿌리는 것이였습니다. 물론 속도면에서의 희생이 따르는 방법이긴 합니다만, 경험상 화면상에 문제 출력은 사실 수십자 정도에 불과합니다. 즉, 많아봐야 수백자라는 이야기이지요. 하지만 여려운 점은 글자를 구성하는 좌표를 얻어오는 방법이였습니다. 방법은 2가지인데, 하나는 Windows API를 이용하는 방법과 앞서 언급한 FreeType을 이용하는 방법이 있습니다.

저는 FreeType을 사용하기로 결정하였는데, OpenGL과 같은 플렛폼 독립적인 라이브러리와 궁합이 정확히 맞아 떨어진다는 생각에서 였습니다. 제가 시험삼에 작성한 코드의 그 결과 화면은 위와 같습니다.

지정된 폰트의 글자에 대한 Anti-Aliasing 처리된 한글 표시와 그 글자의 구성 좌표를 표시하고 있습니다. 구성좌표는 박스로 나타내었는데, 빨강색 박스는 곡선처리를 위한 제어점(Control Point)입니다.

FreeType의 초기화, 안티알리아싱 처리된 글자의 출력, 글자의 구성 좌표를 얻는 방법에 대한 전체 코드가 담긴 첨부파일을 참고하시길 바랍니다. 2006년이라는 시대에 한글처리 문제로 고민해야 하는 웃지 못할 상황에 도움이 되길 바라는 마음에서 글을 올립니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다