我正在尝试将字体字形图像打包到单个纹理中。位图是每像素 1 字节的单色位图,我希望将它们全部打包到 1 个纹理上。我能够计算所需的最小纹理大小,但无法管理将它们全部打包在一起的算法。
我目前将位图存储为字符指针,并且我能够获取每个位图的尺寸。
最佳答案
我不是装箱方面的专家,但这里有一个您可以尝试的简单算法。
- 按从最高到最短的顺序排列字形。最高的字形将被放置在最前面。
- 令 H 为下一个最高的未放置字形的高度。
- 通过添加高度 H 来垂直扩展纹理。
- 用剩余的字形填充关卡(从最高到最短),直到没有空间容纳下一个字形。
- 转到#2
这被称为 Next-Fit Decreasing Height (NFDH)算法。互动演示可见here .
由于您的字形或多或少具有相同的高度,我认为这个简单的算法应该会给您带来良好的结果。
看看这个 survey了解更多算法。
关于c++ - 打包位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674521/