游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2251|回复: 2

关于纹理字体的使用问题(已解决)

[复制链接]

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
发表于 2011-6-3 18:57:00 | 显示全部楼层 |阅读模式
我用FreeType2将一种ttf字体输出到了图片中,
但有个很棘手的使用问题就是,在这个巨型图片上,我该如何排列这些字体?

首先,如果要将纹理坐标索引与字符码作匹配排列的话,会有个问题,就是并不是0~65535的所有字符码都有对应的字形,如果强制填充上空余的位置的话,将会浪费巨大空间(实际能使用的汉字加上英文字符以及特殊字符,也就三四千而已)

其次,如果不将纹理坐标索引与字符码作完全匹配的话,那么为了能够实现快速定为字符,恐怕就只有给所有字符的纹理坐标写一个映射表到ini文件了。然后程序启动的时候,加载这个映射表,根据此映射表来读取字符纹理坐标。不过得需要至少3000种映射,也就意味着程序要从ini文件中读3000个映射数据,这也仅仅是一种字体文件,实际游戏中可能会用到两三种,比如楷体,隶书,行书,这么多一起读取,这CPU可就有得耗了。

有没有做过的朋友,有什么好的方法?

18

主题

116

帖子

218

积分

中级会员

Rank: 3Rank: 3

积分
218
发表于 2011-6-5 07:18:00 | 显示全部楼层

Re: 关于纹理字体的使用问题(已解决)

轩辕崇正: 关于纹理字体的使用问题(已解决)
我用FreeType2将一种ttf字体输出到了图片中,
但有个很棘手的使用问题就是,在这个巨型图片上,我该如何排...

不晓得轩辕兄是不是考虑到性能的因素,所以放弃了基于gdi的ID3DXFont。
Xna本身也不支持中文字符,但是我曾经看到有人用跟老兄相似的手法解决了这个问题,也就是字体纹理。
不过区别在于对方可能没有使用ttf,而是自己用gdi+生成了一幅字体纹理。
ascii码在某个数值之后(具体多少我忘了)便是汉字编码区,一个整型值强制转化之后便可得到这个汉字字符。加上实现要求字体的尺寸,以及纹理定制时每行的汉字数,就可以完全得知具体哪个汉字相对应的纹理位置了。
轩辕兄的问题解决了吗?ttf我不是很懂,有很多冗余字符吗?

67

主题

390

帖子

392

积分

中级会员

Rank: 3Rank: 3

积分
392
 楼主| 发表于 2011-6-5 10:11:00 | 显示全部楼层

Re: Re: 关于纹理字体的使用问题(已解决)

思月行云: Re: 关于纹理字体的使用问题(已解决)


不晓得轩辕兄是不是考虑到性能的因素,所以放弃了基于gdi的ID3DXFont。
Xna本身也不支持中文字符,但是我...


http://www.cppblog.com/richardhe/archive/2009/01/04/63851.html
众所周知,ID3DXFont封装了GDI,比GDI本身还慢了好几倍的速度.而且字体质量差.你用隶书试试就知道了
我们是中国人,别指望外国人能把汉字支持的有多好,因为这个世界上语言太多了。只能自己想办法了。
有很多方式都可以生成纹理字体,ttf是最原始的,只是ttf格式文件不像图片格式,它是一个相当复杂的东西,微软对他的格式说明就用了500多页,所以就有了FreeType2库
没有什么冗余字符,因为汉字的Unicode编码在区间[0x4E00,0x9FA5]之间,除此之外,就是0~255那些基本字符了。
PS:测试了一下两者的数据,用ID3DXFont渲染一个"龙"字,渲染1W次,帧率是2,而用纹理字体渲染,则是75帧.差距是显而易见的.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-9 18:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表