c++ - Direct3d 中的 vector 文本渲染系统

标签 c++ vector fonts directx direct3d

有人知道 directx 中 vector 字体的实现吗?

如果没有,有人对此有好的起点吗?

甚至是用 Directx 编写的具有基本缩放支持的阅读器的任何示例。

最佳答案

直接 vector 字体在 D3D 中效果不佳,因为它需要一个中间纹理来保存光栅化数据(垂直或像素)并且需要做更多的额外工作,因此您需要一种稍微不同的方法来让他们轻松高效地工作(如果您受到性能限制/关心性能)。您应该为此使用带符号的距离字段(它们可以很好地放大,但如果您的字体很复杂,则缩小比例会很糟糕。硬边也不能很好地存储,但这可以通过使用两个 channel 来存储来解决data.Distance fields also allow easy smoothing, bolding, outlining, glowing and drop shadows), all la valve 改进的 alpha 测试高级 vector 纹理渲染(它顺便引用了一篇关于 vector 字体的论文,如果你想这样做的话)。它严重依赖着色器(虽然它可以通过 alpha 测试在 FFP 中完成,但是在像素着色器中使用 smoothstep 可以以最小的开销提供更好的结果),但是除了 ps v1 之外不需要任何东西。见http://www.valvesoftware.com/publications.html对于本文,请参阅 valves source sdk 中的着色器以获取完整的实现引用。 (顺便说一句,我刚刚使用它构建了一个基于 Dx11 的文本渲染器,效果非常好,尽管我使用了一个工具来暴力破解我的 sdf,所以我不需要在运行时创建它们)。

关于c++ - Direct3d 中的 vector 文本渲染系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720168/

相关文章:

android - 如何在 View 中显示波斯语(波斯语)数字

ios - 使用 Ubuntu 字体不适用于 iOS 上的特殊字符

c++ - 如何确保一些代码被优化掉?

c++ - QString,解析和替换一些特定的部分

c++ - 具有两个输入参数的 std::vector 构造函数

android - 字体未在 ionic 3 应用程序的 android 设备上应用

c++ - 在单元测试时如何模拟基类的非重写、虚拟/非虚拟方法?

c++ - #ifdef VALUE 与 #if Defined (VALUE) 之间有什么区别

c++ - 带有对象 C++ 的填充 vector

c++ - 当我制作一个父类的 vector 时,如果我把一个 child 放在那里, child 的成员会丢失吗?