我正在使用Haskell的Fungen框架,并且有一个使用BitmapFonts的函数。问题是,我可以使用的唯一BitmapFonts是GLUT附带的,这里是数据:
数据BitmapFont = Fixed8By13 | Fixed9By15 | TimesRoman10 | TimesRoman24 | Helvetica10 | Helvetica12 | Helvetica18
这些字体对于我的应用程序来说非常小,我想使用另一个BitmapFont,而不仅仅是这些,或者使其中一个更大。我该怎么办?
答案 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等内容。