游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2869|回复: 4

关于D3D高效中文显示问题,诚心请教

[复制链接]

1

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2007-7-22 16:05:00 | 显示全部楼层 |阅读模式
目前正在汉化一款D3D软件。它自己封装了文字引擎。它的过程大概如下:
预先定义该软件会使用的各种字体,有几种字体就做成几个bitmap存放于硬盘上。
因为只是显示英文。bitmip非常小。显示文字的时候从bitmap直接生成texture
现在我要显示中文,把思路改成这样:

首先内存中会有一个查找表。存放汉字。并且每个汉字会有一个bitmap(该bitmap与汉字大小一样大)。然后维护了一张纹理,该纹理里有查找表里已有的汉字bitmap后形成的纹理。

然后我的汉字有十几个字体大小之类的分类,我的查找表就应该有相应的个数。

我觉得我的这个思路没有问题。就是没办法证明这样搞的效率是不是很高。并且我在运行的过程中出现在运行错误。

相关部分思路与伪代码如下 :

1,创建设备Device
2,检查有多少类句子(文字)需要写入纹理

while(类--)
{
     m_pDevice->CreateTexture( TEXTURESIZE, TEXTURESIZE, 1, 0,
                D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, &(fontData[fontNumber].pTexture) ,NULL) )
     ....其他处理
}
现在遇到的问题是这样的:
while循环中,第1次没有问题。,纹理正确形成。第2次就报出异常。“未将对像引用实例化”


1

主题

2

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2007-7-22 16:09:00 | 显示全部楼层

Re:关于D3D高效中文显示问题,诚心请教

一不小心按了回车键。。。自己就提交了。还没有写完-----继续

经过查错后,错误出现在   m_pDevice->CreateTexture( TEXTURESIZE, TEXTURESIZE, 1, 0,
D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, &(fontData[fontNumber].pTexture) ,NULL) )
fontData[fontNumber]是自定义的数据结构,把Texture vertexbuffer indexbuffer之类的指针都保存在这里面。

我仔细调试后发现每次循环运行到这个语句时,device就非法了。
如果我去掉创建纹理的语句,就可以运行得通。但是纹理不存在了我也无法渲染了。
哪位高手可以指点一下我啊。。。。

6

主题

307

帖子

309

积分

中级会员

Rank: 3Rank: 3

积分
309
发表于 2007-7-22 18:08:00 | 显示全部楼层

Re:关于D3D高效中文显示问题,诚心请教

用ID3DXFont吧

我自己做字体只是为了更多的功能,比如彩色字,内嵌图标,可调整字间距/行间距等等

13

主题

74

帖子

74

积分

注册会员

Rank: 2

积分
74
发表于 2007-7-23 14:24:00 | 显示全部楼层

Re:关于D3D高效中文显示问题,诚心请教

"一个汉字会有一个bitmap"
    这个不仅会造成维护复杂,同时效率低下。假设屏幕上有1000个不同的汉字,就要切换1000次Texture,DIP1000次。E文字体之所以可以使用一张Texture,是因为E文文字的特点(所有字,词都只使用26个字母,有限几个特别符号,总共不超过128个ASCII码),所以可以把所有字母保存在一张Texture上。上面的假设,即便有1000个不同的E文单词,也只需要一次Texture切换,DIP一次。明白其中的道理,就知道怎么做了。
1.有限使用的中文字存在一张大的Texture中,(假设使用常用汉子,同时字宽不大的情况下是可行的)
2.学学ID3DXFont的方式,动态生成汉字Texture,在作一些缓存和优化

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2007-7-23 17:08:00 | 显示全部楼层

Re:关于D3D高效中文显示问题,诚心请教

可以参考HGE里面的字体
它通过读取系统字体,然后在内存中生成纹理图片绘制出来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 18:12

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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