我正在尝试将字体字形图像打包到单个纹理中。位图是每个像素单色1个字节,我希望将它们全部打包到1个纹理上。我能够计算所需的最小纹理大小,但是无法管理将它们打包在一起的算法。

我目前将位图存储为char指针,并且能够获取每个位图的尺寸。

最佳答案

我不是装箱专家,但是您可以尝试使用以下简单算法。

  • 将字形从最高到最短排序。最高的字形将首先放置。
  • 令H为下一个最高的未放置字形的高度。
  • 通过添加高度H垂直扩展纹理。
  • 用其余字形(从高到短)填充级别,直到没有空间容纳下一个字形。
  • 转到#2

  • 这称为Next-Fit Decreasing Height (NFDH)算法。可以看到一个交互式演示here

    由于您的字形或多或少都是相同的高度,因此我认为这种简单的算法应该可以为您带来良好的效果。

    查看此survey了解更多算法。

    关于c++ - 打包位图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6674521/

    10-14 09:11