【问题标题】:How can I use other fonts in Glut - Fungen - Haskell如何在 Glut - Fungen - Haskell 中使用其他字体
【发布时间】:2011-11-17 06:58:33
【问题描述】:

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

数据位图字体 = Fixed8By13 |固定9By15 |时代罗马10 |时代罗马24 | Helvetica10 |黑体12 | Helvetica18

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

【问题讨论】:

    标签: haskell glut bitmap-fonts


    【解决方案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之类的东西。

    【讨论】:

    • 我已经用 StrokeFont 替换了 BitmapFont 来更改 FunGen 的代码,但是 strokeFont 太大了!但我不知道我可以改变 strokeFonts 的大小,我会尝试并告诉你发生了什么。感谢您的回答!
    • 我改变了strokeFont的大小,但是做了之后,文字就出现在了屏幕的底部,我无法改变它的位置。这只是在改变它的大小之后发生的。我决定在我的游戏中使用固定的 bitmapFont,因为我没有时间浪费在字体上。无论如何感谢您的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2017-07-13
    • 2021-03-09
    相关资源
    最近更新 更多