我想将文本(度数)添加到指南针,并希望使用纯 OpenGl 方法来做到这一点。
除非你能忍受看起来不太好看的中心笔画字体,否则你别无选择,只能使用其他库或 API 的帮助。
理论上OpenGL可以与OpenVG协同工作,但是到目前为止对OpenVG的整体支持很差,OpenGL的互操作性更差。但是假设你有一个正常工作的 OpenVG——OpenGL 互操作性工作,那么 OpenVG 就是要走的路。
实际上,您必须有所不同。一个非常有成效的方法是使用字体渲染器库(如 FreeType)和一些布局引擎(如 Pango)来生成要渲染的文本的轮廓笔划列表,然后可以使用 NVidia 的一些扩展直接渲染(http://www.opengl.org/registry/specs/NV/path_rendering.txt仅在最新的 NVidia GPU 上可用)或手动镶嵌成三角形,无论是在 CPU 上还是通过 GPU 几何和镶嵌着色器的组合。使用 OpenGL 基元将字形绘制为镶嵌填充轮廓的一个巨大缺点是,如果使用的帧缓冲区没有多重采样格式(全屏抗锯齿),它们看起来会很脏(由于锯齿)
下一个最好的事情是将文本渲染为图像并将其复制到 GPU 并通过渲染纹理四边形将其覆盖在场景上。您应该在渲染四边形时已经应用所有文本转换,以便字体提示系统可以在光栅化之前对转换后的字形进行适当的调整。
另一种方法是使用纹理映射字体。到目前为止,我自己实现了两个 TMF 引擎,但我个人建议现在不要使用这种方法,因为 TMF 是资源消耗。一个 200kiB 的 TTF 字体可以炸毁几兆字节的纹理数据。也许有一天我或其他人用 OpenCL、CUDA 或 Compute Shader 实现了一个 TrueType 或 OpenType 渲染引擎,但在那之前用 OpenGL 渲染文本是一件肮脏的事情。
归结为
→ 选择 2