【问题标题】:Font Outline Beizier Spline Contoures and DirectWrite字体轮廓 Beizier 样条曲线和 DirectWrite
【发布时间】:2012-06-26 01:39:43
【问题描述】:

我正在考虑是否将 DirectWrite 用于将有 DirectX 11 版本和 OpenGL 3.1+ 版本的项目。

据了解,DirectWrite 使用位于 Direct3D 10.1 之上的 Direct2D(直到 DirectX 11.1 发布)。这意味着要在 Direct3D 11 中使用 DirectWrite,目前,我必须创建一个 Direct3D 10.1 设备和一个 Direct3D 11 设备,然后在这两个设备之间共享资源,这似乎带来了一些同步开销。另一个问题是我似乎无法使用这种设置将文本直接渲染到 d3d11 后备缓冲区,对吧...?

我也不知道是否有可能在任何实际意义上将 DirectWrite 与 OpenGL 结合起来..?我的猜测不是……

Sooo...我也在考虑编写自己的字体渲染器,我希望能够根据它们的 Bezier 样条轮廓来渲染字体,以实现分辨率独立。我知道 GetGlyphOutline() 函数,但根据 MSDN 库,它似乎正在被弃用,并且“......不应在新应用程序中使用”。查看 MSDN 上的 DirectWrites 参考页面,我看不到任何方法可以像使用 GetGlyphOutline() 那样在 Bezier 样条信息中获得相同的信息。您可以获得包含在 ID2D1SimplifiedGeometrySink 中的轮廓信息,但我看不到您如何从 ID2D1SimplifiedGeometrySink 中获得纯贝塞尔曲线、控制点、信息,您只能将其用于使用我的 D2D(D3D10.1)进行绘图在这一点上没有那么感兴趣。

有没有办法使用非弃用方法 DirectWrite 或其他方法来获取字体轮廓轮廓?

您可能知道,我对 DirectWrite 和 Direct2D 都不太熟悉。我试图弄清楚该采取什么方向。是否值得走 DirectWrite/D2D 道路,或者制作我自己的字体渲染器,或者其他一些绝妙的想法 :)。有什么建议吗?

PS我目前正在开发Win7平台,发布后会迁移到Win8。

【问题讨论】:

    标签: c++ opengl fonts directx directwrite


    【解决方案1】:

    幸运的是,你有点倒退了。 Direct2D 使用 DirectWrite,而不是相反。从技术上讲,您可以单独使用 DirectWrite(请参阅:IDWriteBitmapRenderTarget)。如果您处于原型设计阶段,使用 Direct2D 将软件渲染到通过IWICImagingFactory::CreateBitmap() 创建的IWICBitmap 可能会更容易(或者只是包装您已经创建的位图,然后自己实现IWICBitmap)。你使用ID2D1Factory::CreateWicBitmapRenderTarget(),调用ID2D1RenderTarget::BeginDraw(),然后通过IDWriteFactory创建你的IDWriteTextFormat和/或IDWriteTextLayout,然后在渲染目标上调用DrawText()或DrawTextLayout(),然后EndDraw()。然后复制到硬件纹理中,然后随意绘制。

    【讨论】:

    • 谢谢瑞克,我会试试这些东西!我还发现了如何获得字体的贝塞尔轮廓,我想要这些是因为我希望能够创建 3D 文本。您要做的是创建一个派生自 ID2D1SimplifiedGeometrySink 的类,并在该派生类的方法中捕获所有大纲信息。
    猜你喜欢
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 2020-07-04
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多