Image 将矩形图像数据打包为方形纹理

Image 将矩形图像数据打包为方形纹理,image,textures,packing,Image,Textures,Packing,我有N个项目的2D图像数据,将是矩形的,我想把他们打包成一个单一的2倍纹理尽可能有效 一个简单的、没有效率的、幼稚的算法实现来打包这些rect很容易,但我相信人们已经想出了尽可能节省空间的算法。我已经找到了很多关于光照贴图打包的参考资料,这与我正在寻找的类似,但是光照贴图的算法倾向于考虑非矩形图像,这实际上使事情变得比我需要的更复杂 有人有提示吗?我应该在谷歌上搜索算法或论文作者的姓名 谢谢。您在1D中遇到的问题称为装箱。也许这对你的搜索来说是个好的开始 请注意,您要解决的问题确实很难(它是NP

我有N个项目的2D图像数据,将是矩形的,我想把他们打包成一个单一的2倍纹理尽可能有效

一个简单的、没有效率的、幼稚的算法实现来打包这些rect很容易,但我相信人们已经想出了尽可能节省空间的算法。我已经找到了很多关于光照贴图打包的参考资料,这与我正在寻找的类似,但是光照贴图的算法倾向于考虑非矩形图像,这实际上使事情变得比我需要的更复杂

有人有提示吗?我应该在谷歌上搜索算法或论文作者的姓名


谢谢。

您在1D中遇到的问题称为装箱。也许这对你的搜索来说是个好的开始

请注意,您要解决的问题确实很难(它是NP难的)。因此,您不应该搜索最优解,而应该搜索一些聪明的启发式算法

我认为自下而上的动态规划适用于一维箱子包装,但不适用于二维箱子

你可以考虑通过只解决1D问题来简化你的问题,做出一些限制,比如在一维中将纹理切割成几个(可变大小的)切片


另一种可能性是在其上运行元启发式优化,如进化算法或粒子群优化。

我需要做您描述的事情

这是我使用的Python代码,它是Python食谱中的一个配方:


我也有类似的问题,但我正在打包方块。试试这个:


<> C++代码不是很优雅,但至少你可以找到解决这个问题的基本思路。

< P>这里可以找到非常好的简单的打包算法:

<>它的实现只占用200的C++行,而不是更多(我想你已经有了位图操作例程)。 Jukka Jylänki介绍了背后的理论 (寻找“打包垃圾箱的一千种方法”)


<作者>提供了C++库,它从我的角度来看是非常臃肿的,但是另一方面它有很多选择,并且有很好的文档。

这个代码看起来不像是在寻找一个最佳的解决方案。此外,它似乎希望将所有图像打包到一个纹理中。