2011-07-16 22 views
0

有没有人知道directx中矢量字体的实现?Direct3d中的矢量文本渲染系统

如果没有人有这个好的起始地点?

甚至任何使用基本缩放支持在Directx中编写的阅读器示例。

+0

也许您在寻找DirectWrite? http://msdn.microsoft.com/en-us/library/dd371554%28v=vs.85%29.aspx – RocketR

+0

不幸的是,我不得不为此任务使用direct3d。 – thirsty93

+0

我真的只是想找一种方法在directx中使用干净的高质量可缩放字体。它们可能相当密集cpu,因为我不会渲染任何其他东西。但我需要能够用文本填充屏幕。 – thirsty93

回答

1

直接矢量字体在D3D中无法正常工作,因为它需要一个中间纹理来保存栅格化数据(垂直或像素)并需要做更多的额外工作,因此您需要一种方法让它们有点不同让他们轻松高效地工作(如果您的表现受到限制/关心表现)。你应该使用带符号的距离字段来表示它(它们可以很好地扩展,但是如果你的字体很复杂,可能会缩小比例,硬边也不能很好地存储,但是这可以通过使用两个通道来存储数据,距离场也允许简单的平滑,粗体,轮廓,发光和阴影),阿尔拉阀门的改进的阿尔法测试先进的矢量纹理渲染(如果你真的想这样做的话,这意味着矢量字体的纸张)。它非常依赖着色器(尽管它可以通过alpha测试在FFP中完成,但在像素着色器中使用smoothstep提供了更好的结果,且开销最小),但除了ps v1之外,其他任何东西都不需要任何东西。请参阅文件http://www.valvesoftware.com/publications.html,参见阀源sdk中的着色器以获取完整的实现参考。 (我原意使用这个构建了一个基于Dx11的文本渲染器,奇妙地工作,虽然我使用了一个工具来强制我的sdf,所以我不需要在运行时创建它们)。

+0

+1为距离字体的链接(认真的人,_使用这个stuff_),但-1在说D3D不能使用矢量字体。矢量字体意味着使用三角形绘制字体,而不是栅格化它们。你必须做的是为每个字形生成一个网格,而不是修改字形。这不是一个简单的过程,但它确实可行。 –

+0

@nicol:似乎你抓到我时,我还在修理它并充实它。更新为在D3D中使用矢量字体更清楚一点。 – Necrolis