2

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

数据 BitmapFont = Fixed8By13 | 固定9By15 | TimesRoman10 | 时代罗马24 | Helvetica10 | Helvetica12 | Helvetica18

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

4

1 回答 1

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缩放/转换/旋转

因此,一个好的开始可能是让 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的东西。

于 2011-11-17T15:51:25.417 回答