문서의 이전 판입니다!
스타팅 파일
- 이전 강의는 GUI와 메인메뉴였다.
- 스타팅 파일은 GUI메인메뉴를 만들고 난 결과물이다.
목적
한글등 유니코드를 지원하지 않는다면, 게임의 표현력은 한계가 있을 수 밖에 없다. 특히 한국에서 게임을 출시한다면 한글은 필수 일 것이다.
그런데 raylib는 불행히도 drawtext()함수만으로는 한글을 제대로 입력할 수 없다.
이는 love2d와 다른 점이다. 그런걸 보면 love2d가 매우 강력함을 알 수 있다. love2d는 산업표준인 FreeType2 라이브러리를 이용해서 벡터 폰트인 ttf와 otf도 그냥 폰트로 지정한 후 print함수로 써주면 한글 등의 출력이 바로 된다1).
그런데 raylib의 경우 FreeType2 대신에 stb_truetype이라는 라이브러리를 이용하여 ttf를 rasterization2) 한다3).
이 stb_truetype의 문제인지, 아니면 단순히 raylib를 만든 raysan의 개인취향인지 모르겠지만
Freetype2를 이용하는 love2d와 sdl은 폰트를 한번 래스터화(벡터값을 형상화)하면 계속하여 그 폰트를 사용할 수 있지만,
raylib 에서는 문자열에 포함된 글자만 래스터화하기 때문에 미리 문자열이 무엇인지를 알아야 한다.
이러한 raylib의 방식은 성능을 염두에 둔 것으로 보인다. 필요한 글자만 형상화해서 램에 저장한 후 불러오므로 가벼울 수 밖에 없다.
다만 램 용량이 넘쳐나는 요새에도 과연 이런 방식으로 할 필요가 있을까 의문이긴 하다.
raylib의 텍스트 출력 개념
폰트에는 비트맵이지미폰트가 있고, 벡터 폰트가 있다.
1. 비트맵이지미 폰트
비트맵 픽셀로 이미지를 만들어서 그 이미지를 글자로 쓰는 방식이다. 픽셀폰트라고도 한다.
비트맵이지미 폰트는 예전 90년대 윈도우가 쓰던 방식으로 파일확장자가 fnt이다. 별도의 png 그림파일에 문자의 그림을 그려놓은 후, 그 그림의 위치를 fnt 파일에 저장해 놓고 해당 그림만 불러온느 방식이 fnt 폰트 방식이다.
쉽게 말해서 2d에서 게임캐릭터를 애니메이션화할 때, 이미지 스프라이트에서 해당구간만 가져와서 이미지를 출력하는 것과 동일한 개념인 것이다.
비트맵방식이므로 확대를 하면 글자가 이쁘지 않다. 따라서 요새는 잘 안 쓰인다.
유니티의 경우 textmeshpro에서 이러한 비트맵 폰트 방식을 이용한 적이 있다. 벡터로 저장된 ttf의 글자들을 32혹은 64픽셀 크기로 일일이 불러온 후 해당 글자마다 다시 그림을 쫙 그려준 것이다. 글자를 비트맵으로 만들면 아무래도 그림을 수정하듯 직관적으로 수정할 수 있으니 이렇게 비트맵으로 전환하는 수요가 아직도 가끔 있다.
TTF를 비트맵폰트인 fnt로 전환하는 가장 유명한 프로그램으로는 angelcode에서 만든 bmfont 가 있다.
2. 벡터 폰트
트루타입폰트(ttf)와 오픈타입폰트(otf)가 바로 벡터 폰트이다.
트루타입폰트는 2차 베지어 곡선을 이용하고 오픈타입폰트는 3차 베지어 곡선을 이용한다고 한다4).
재밌는 사실은, ttf는 애플이 만들었지만 현재 윈도우에서 가장 많이 쓰이고 있고(물론 윈도우도 지금은 오픈타입으로 많이 넘어가고 있다),
otf규격은 마이크로소프트가 만든 것이지만 지금 현재 애플의 주력이라는 것이다5).
로그인