有没有人有任何教程/信息用于在不使用GDI的本机DirectX 9中创建和渲染字体? (例如,不使用ID3DXFont)。
我在读这不是最好的解决方案(由于访问GDI),但什么是“正确”的方式来呈现字体在DX?不使用GDI的DirectX字体教程
回答
ID3DXFont是易于使用,早期调试输出的好东西。但是,它确实使用GDI进行字体光栅化(而不是硬件加速),并且有明显的性能下降(尝试它,其实非常明显)。但是,从DirectX 11开始,字体将使用Direct2D进行渲染并进行硬件加速。
渲染文本的最快方法是使用所谓的“位图字体”。我会解释如何做到这一点,除了有很多不同的方法来实现这种技术,每种方法的复杂性和能力都不相同。它可以像加载预先创建的纹理并从中绘制字母的系统一样简单,也可以是一个系统,它默默地用Windows注册字体,并在加载时在内存中创建纹理(我与朋友一起开发的引擎做到了这一点,它非常光滑)。无论哪种方式,您都应该看到位图字体的性能提升非常明显。
为什么这不是一个好的解决方案?
将GDI渲染和D3D渲染混合到同一个窗口中是一个坏主意。
但是,ID3DXFont不使用它。它使用GDI将字形栅格化为纹理。并使用该纹理来渲染实际文本。
关于唯一的选择是使用另一个库(例如FreeType)将字形栅格化为纹理,但我不确定这是否会带来任何实质性好处。
当然,对于简单的(例如非亚洲)字体,您可以事先将所有字形栅格化为纹理,然后使用该纹理在运行时绘制文本。这种方式运行时不需要使用任何字体渲染库,它只是使用纹理绘制四边形。这种方法在大字号或带有大量字符的字体时效果不佳。也不能很好地处理复杂的排版(例如,必须加入字母等)
使用DirectX时,使用GDI呈现标准字体的正确方法是使用GDI。
但是,如果
- 要支持跨平台的字体渲染
- 与国际化的适当的支持 - 包括远东语言,保持了字形在字体中的每个字符是不切实际
- 和/或你想分发你自己的字体并渲染它们而不用“安装”它们...
然后libfreetype可能是你在找什么。我不认为它很容易:它比使用本机字体API复杂得多。
就我个人而言,我认为ID3DXFont是要走的路。 如果你真的想使自己的字体程序,我建议你看看: http://creators.xna.com/en-us/utilities/bitmapfontmaker
您可以使用它来创建位图印上的所有字符。然后,它只是一个问题或加载纹理和blitting相关的字符在正确的地方在屏幕上。(这是XNA用于其字体绘图的东西)
它有很多工作,但是您不需要将字体安装到目标PC上,而且您可以利用它来进入Photoshop和在那里编辑字体外观。
- 1. directx教程C++
- 2. DirectX教程/书籍
- 3. System.Windows.Media.Imaging是否使用DirectX(如WPF)或GDI +?
- 4. 使用指定的字体与DirectX-11
- 5. directx多线程教程/示例代码
- 6. GDI的字体问题+
- 7. GDI/GDI +如何在没有OpenGL或DirectX的情况下工作
- 8. Windows XP上的DirectX,GDI +或SDI?
- 9. gdi + GetWorldTransform()它在directx中的位置?
- 10. gametutorials.com问题和评论DirectX教程
- 11. GDI +字体大小差异
- 12. 如何将形状从Directx转换为gdi +使用c#
- 13. DirectX字体没有绘图?
- 14. 添加了AddFontResourceEx的字体在GDI中不起作用+
- 15. 的DirectX 11:文本输出,使用自己的字体纹理
- 16. Directx 11球体
- 17. 使用DirectX C流媒体视频#
- 18. 实体编程教程?
- 19. 使用GDI或GDI的高级图形+
- 20. 不使用字体的过程
- 21. GDI +对象泄漏(字体,笔刷)
- 22. 是否有一个很好的DirectX(3D)DirectWrite教程?
- 23. .NET GDI +中字体大小的不一致?
- 24. 教程使用requests_oauth2
- 25. 在WPF应用程序中使用GDI +
- 26. mono mac osx csharp win形式gdi字体异常但不使用任何MS字体
- 27. 使用ImpactJS的TriggerIO教程?
- 28. 使用generatedInitialize()的教程
- 29. 改变一个嵌入的TrueType字体,使它可以被Windows使用GDI
- 30. 使用远程字体(字体)