这是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的东西。