如何在Glut中使用其他字体 - Fungen - Haskell

时间:2011-11-17 06:58:34

标签: haskell glut bitmap-fonts

我正在使用Haskell的Fungen框架,并且有一个使用BitmapFonts的函数。问题是,我可以使用的唯一BitmapFonts是GLUT附带的,这里是数据:

数据BitmapFont = Fixed8By13 | Fixed9By15 | TimesRoman10 | TimesRoman24 | Helvetica10 | Helvetica12 | Helvetica18

这些字体对于我的应用程序来说非常小,我想使用另一个BitmapFont,而不仅仅是这些,或者使其中一个更大。我该怎么办?

1 个答案:

答案 0 :(得分:1)

以下是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的Text类型将字体限制为固定大小的BitMapFont

type Text = (String, BitmapFont, (GLdouble, GLdouble), GLclampf, GLclampf, GLclampf)

但renderString也可以使用StrokeFont,这在字体系列中更受限制,但对标准OpenGL scaling/transformation/rotation做出响应。

因此,一个好的开始可能是使myPutGameText接受一个支持StrokeFont的MyText并在渲染之前进行缩放变换。这是一些伪代码,我希望有人会纠正:

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等内容。