纹理图集UV坐标转换

Texture atlas UV coordinate conversion

我的纹理有一些从 (0, 0)(16, 16) 的 UV 坐标。现在,我已将此纹理打包到大小为 dim (w, h) 的纹理图集中,位置为 rec (x, y, w, h)。需要转换UV坐标才能在图集里解决,但是最近脑子炸了,自己也想不通

如何转换坐标?

(思路是将How转化为纹理矩阵,所以矩阵也算答案)

终于自己找到了:

translate(rec.x, rec.y)
scale(1 / dim.w, 1 / dim.h)
scale(rec.w / 16, rec.h / 16)

if (invertY)
  scale(1, -1)
  translate(0, dim.h)

注:

  • 你可以结合这两个缩放操作
  • 您可以添加解压缩图像的尺寸而不是 / 16
  • 由于矩阵,您将需要 3 个维度并为平移输入 z=0,为缩放输入 z=1
  • 因为是矩阵,可能需要颠倒运算顺序