基础: WPF中的三维文字2011-12-21 MSDN Charles Petzold诸如 TrueType 之类的矢量字技术主要供我们灵活准确排版之用,但它们也可以充当图形处理的对象。程序员可以访问定义每个文本字符的实际轮廓,并将它们视为矢量图形对象。这些轮廓可以进行笔划书写、填充、用于剪辑或进行转换。Microsoft® Word 中的常见“艺术字”功能便是以此概念为基础。认识到这些字符轮廓的特性和局限性非常重要:它们是完全几何性的,缺少操作系统通常在屏幕上呈现字体时所用的“提示”。通过这些提示可以依据可用的像素网格智能地对字符进行光栅化处理。因此,这些无提示的字符轮廓在大字号状态或高分辨率设备上看起来效果最佳。它们通常无法满足在屏幕上呈现普通字号文字的要求。(不过,随着打印机分辨率的提高以及对屏幕图形反失真使用的增多,提示的价值已不像原来那么重要。)每当遇到新的 Windows® API 时,我都会特意去寻找可访问这些字符轮廓的来源。在 Windows 窗体中,它是 GraphicsPath 类的一部分。AddString 方法的四种重载可让您将字符轮廓添加到一个路径。我所著书籍“Programming Microsoft Windows with C#”(Microsoft Windows 编程——C# 篇)(Microsoft Press, 2002) 和“Programming Microsoft Windows with Microsoft Visual Basic® .NET”(Microsoft Windows 编程——Microsoft Visual Basic® .NET 篇)(Microsoft Press, 2003) 的第 19 章对此过程进行过说明。在 Windows Presentation Foundation (WPF) 中,提供字符轮廓访问权的类和方法隐藏得更好,但它们确实存在。来自 System.Windows.Media 命名空间的 FormattedText 和 GlyphRun 类均具有名为 BuildGeometry 的方法,这些方法可为特定字体和文本字符串返回 Geometry 对象。在本文中,我将完全使用 FormattedText,因为它是两个类中较容易的一种。我所著书籍“Applications = Code + Markup”(应用程序 = 代码 + 标记)(Microsoft Press, 2006) 的第 28 章和第 30 章中提供了一些 FormattedText 和 BuildGeometry 与二维图形结合使用的示例。刚开始研究 WPF 中的三维文字时,我很自然地考虑过将这些字符轮廓转为三维文本块的可能性,就像在印刷媒体上或者电视上的飞行徽标效果中看到的那样(请参见图 1 中提供的示例)。我知道这个工作会涉及二维轮廓到三维三角形网格的转换,而除此之外,我只确定一件事:其中涉及的一些编程不会那么简单。

图 1 实心三维文字