【问题标题】:OpenGL font rendering and texture packing : what if out of space?OpenGL 字体渲染和纹理打包:如果空间不足怎么办?
【发布时间】:2021-07-28 19:16:59
【问题描述】:

要使用 OpenGL 渲染文本,一种常见的解决方案是将字符打包到一个纹理中,例如 512x512,然后使用一次绘制调用渲染字符串。但是,如果我们使用大量的 unicode 字符,如何处理纹理不能适合所有字符的情况?字符串需要使用不同的纹理。如何处理?

【问题讨论】:

  • 鉴于 OpenGL 4.6,阵列纹理必须支持的最小尺寸是 2048 层 2048x2048 纹理。对于 64x64 像素的字符大小,超过 200 万个字符。
  • 然后,您可以选择:使纹理更大,或使用更多纹理。选项似乎很明显。你对什么感到困惑?
  • 一个不明显的选择是采用 4 通道纹理并在每个通道中存储完全不同的 1 通道数据,这样您就可以有效地获得 4 倍的纹理空间,只要您不这样做想储存颜色。
  • @user253751 这是个好主意。我真的不知道我刚刚开始文本渲染,这对我来说有点不清楚。所以 OpenGL 可以毫无问题地绑定非常大的纹理,我认为极限像 4k 最大值一样低。

标签: opengl fonts


【解决方案1】:

看来你的选择很明显:

  1. 使纹理更大
  2. 让字体变小(OpenGL 可以在渲染时将其拉长,但会看起来很糟糕)
  3. 使用更多纹理
  4. 不要将所有字符都放入纹理中,至少不要同时放入所有字符。 (当你需要不同的字符时改变纹理)

还有一个不明显的选择:

  1. 由于您只需要一个颜色通道来进行字体渲染(因为您在渲染文本时选择颜色,而不是将其存储在纹理中),您可以在相同大小的纹理中获得 4 倍的数据一个纹理的 4 个 RGBA 通道,并在每个通道中存储一个单独的 1 通道纹理。 (纹理仍然占用 1 通道纹理的 4 倍字节,但不是 4 倍像素)

但这些都是你的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多