Как я могу использовать другие шрифты в Glut - Fungen - Haskell - PullRequest
1 голос
/ 17 ноября 2011

Я использую Fungen Framework для Haskell, и есть функция, которая использует BitmapFonts.Дело в том, что я могу использовать только те BitmapFonts, которые поставляются с GLUT, вот данные:

data BitmapFont = Fixed8By13 |Fixed9By15 |TimesRoman10 |TimesRoman24 |Helvetica10 |Helvetica12 |Helvetica18

Эти шрифты очень малы для моего приложения, и я хочу использовать другой BitmapFont, а не только этот, или сделать один из них больше.Как я могу это сделать?

1 Ответ

1 голос
/ 17 ноября 2011

Вот источник 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 .

...