Преобразование UV-координат атласа текстур

У меня есть некоторые координаты UV, которые идут от (0, 0) до (16, 16) для моих текстур. Теперь я упаковал эту текстуру в атлас текстур с размером dim (w, h) в позиции rec (x, y, w, h). Мне нужно преобразовать UV-координаты, чтобы я мог обратиться к ним в атласе, но мой мозг недавно взорвался, и я не могу понять это сам.

Как преобразовать координаты?

(Идея состоит в том, чтобы преобразовать Как в текстурную матрицу, чтобы матрица также считалась ответом)


person piegames    schedule 20.08.2016    source источник


Ответы (1)


Наконец-то нашел сам:

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 для масштабирования.
  • Из-за матриц вам может потребоваться изменить порядок операций
person piegames    schedule 20.08.2016