Вот источник putGameText :
putGameText :: [Text] -> IO ()
putGameText [] = return ()
putGameText ((text,font,(x,y),r,g,b):ts) = do
loadIdentity
color (Color3 r g b)
rasterPos (Vertex2 x y)
renderString font text
putGameText ts
Насколько я понимаю, тип текста FunGEn ограничивает шрифт фиксированным размером BitMapFont :
type Text = (String, BitmapFont, (GLdouble, GLdouble), GLclampf, GLclampf, GLclampf)
, но renderString также может принимать StrokeFont , который еще более ограничен в семействе шрифтов, но отвечает стандартному OpenGL масштабированию / преобразованию / повороту .
Итак, хорошим началом может быть создание myPutGameText, который принимает MyText с поддержкой StrokeFont и выполняет преобразование масштабирования перед рендерингом.Вот некоторый псевдокод, который, я надеюсь, кто-то исправит:
type MyText = (String, StrokeFont, (GLdouble, GLdouble), GLclampf, GLclampf, GLclampf)
myPutGameText :: [MyText] -> (GLDouble,GLDouble,GLDouble) -> IO ()
myPutGameText [] _ = return ()
myPutGameText ((text,font,(x,y),r,g,b):ts) (sx,sy,sz) = do
loadIdentity
preservingMatrix $ do
scale sx sy sz
color (Color3 r g b)
rasterPos (Vertex2 x y)
renderString font text
putGameText ts
Для более богатого рендеринга шрифтов ответ, вероятно, состоит в том, чтобы интегрировать что-то вроде FTGL .