游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6126|回复: 7

DirectX有几种方式渲染图片字体?

[复制链接]

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2010-5-25 11:21:00 | 显示全部楼层 |阅读模式
最近在逆向学习游戏的显字原理,大致流程明白了,只是Directx部分还不太明白。游戏将TTF字体画到设备无关图上,再拷到纹理上,再渲染。现在不明白其是如何渲染的。我只道有用Drawtext的,还有其他的吗?

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-5-25 14:45:00 | 显示全部楼层

Re:DirectX有几种方式渲染图片字体?

逆向学习? 显字原理? 这都是哪里的术语啊?
既然都知道是拷贝到纹理上了,还有什么不明白的?

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2010-5-25 17:30:00 | 显示全部楼层

Re: Re:DirectX有几种方式渲染图片字体?

[quote]
[b]artint: Re:DirectX有几种方式渲染图片字体?[/b]

逆向学习? 显字原理? 这都是哪里的术语啊?
既然都知道是拷贝到纹理上了,还有什么不明白的?
[/quote]
回楼上,我不是搞专业搞游戏的,只是比较喜欢汉化,说的也不是什么术语,是我造的名词。在最近的研究中,遇到了Directx显示文字问题。翻译后,中文与原英文的对齐方式不同。英文是右对齐,中文是左对齐。我不知道怎么回事,猜想是在渲染文字时,使用的函数要对对齐方式进行设置,所以首先要弄明白渲染文字可以用到哪些函数。或许你可以为我指点迷津,指出问题的原因。

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-5-25 18:10:00 | 显示全部楼层

Re:DirectX有几种方式渲染图片字体?

目前的游戏大致分为三种显示方式,1)图片字;2)FreeType; 3)点阵字
图片字就是把游戏中出现的文字预先排列到一张图片上,然后在游戏中按照相应的区域信息显示出来,好处就是可以用美术制作华丽文字效果,缺点就是游戏显示文字受限于语言文字不能使用太多,一般常见于纯拉丁语言的游戏中.最常使用的游戏厂商可能是gameloft,因为他们大部分游戏都是面向欧洲和美国市场.
FreeType字体多见于很多著名游戏引擎,一些开源项目和大部分网络游戏中,具体我记不清楚了,只记得有一套文字排版的标准,包括字形,字符行间距列间距,编码映射等等一大堆说明,字形主要依靠曲线参数储存.FreeType主要就是用来解析按照这个标准制作的字库并可以将字形的参数信息渲染到一块设备无关位图上.网上有这个开源的项目.

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-5-25 18:22:00 | 显示全部楼层

Re:DirectX有几种方式渲染图片字体?

点阵字基本上没有什么游戏使用了吧,简单的说就是在一个规定的分辨率下把字形切成MxN的小块,有笔画的地方用二进制1表示,没有的地方用0表示,或反之....然后每八位二进制作为一个字节储存,如16x16的汉字需要固定的32字节储存....现在随着计算机速度的提高,原来越多的人开始使用FreeType字体而不怎么再使用点阵字了.

做汉化,一般只有使用FreeType的程序才可以,而且还要看游戏中带的字库是否包含了目标语言的字形

另外还有一些小游戏可能还会直接把文字做在图片上,然后整张整张的显示图片~~这种方法常见于按钮.

1

主题

4

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2010-5-26 18:06:00 | 显示全部楼层

Re: Re:DirectX有几种方式渲染图片字体?

[quote]
[b]artint: Re:DirectX有几种方式渲染图片字体?[/b]

点阵字基本上没有什么游戏使用了吧,简单的说就是在一个规定的分辨率下把字形切成MxN的小块,有笔画的地方用二...
[/quote]
谢谢你的回答!
我研究的游戏可能用的是FreeType,反正原理相同。游戏创建设备无关位图(CreateDIBSection),然后从ttf字体创建逻辑字体,用ExtTextOutA将字符集画到位图上,然后拷贝到纹理。渲染字符时,再依据字符编码算出字体的坐标,取出字体图片,输出到屏幕。
我已把字库改成支持中文的了,中文可以显示,只是位置不太好。
我知道WindowsAPI的DrawText有设置对齐方式这一参数,请问Directx渲染时用到的DrawText是否和Windows的一样?我在《DirectX实时渲染技术详解》看到一个和我研究的游戏很相似的例子,他用到了DrawText渲染,但只有四个参数(x pos,y pos,pText,color),是这样吗?
另外,我在反汇编时,还发现不同的程序调用相同directxAPI时,很多时候的地址是一样的(如xxx d3d8.6dd45130)。是不是每个directxAPI都有一个固定的地址?DrawText的内存地址是什么?

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-5-26 18:43:00 | 显示全部楼层

Re:DirectX有几种方式渲染图片字体?

1.自己看MSDN和DirectX SDK, DrawText参数中有一个Format标志,这个标志可以设置文字对齐换行和计算文字覆盖区域等等功能,用法和Win32API那个DrawText大致相同,但是细节上也有一些出入,记得好像DX的DrawText不能避免标点符号开头的问题,Win32 API貌似是可以的....这个我记不清了,其他的标志你看文档就知道了
你说的只有四个参数可能是那本书用的SDK比较老,最新的SDK接口发生变化的原因,目前9.0c的DrawText是六个参数.
2.DirectX和Win32的调用方式不同,DX是基于COM方式的调用....调用都是基于函数指针列表的,细节问题你还是多看看COM方面的书吧,如果你想hook它的接口,可以尝试替换Direct3DCreate9,返回你自己实现的D3D对象....目前很多D3D的分析工具都是用这种方法实现的.不过比较费事...

14

主题

345

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
QQ
发表于 2010-6-2 23:48:00 | 显示全部楼层

Re:DirectX有几种方式渲染图片字体?

既然有了纹理, 画个矩形贴上就是了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-9 10:30

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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