XNA текстурные координаты на объединенных текстурах - PullRequest
0 голосов
/ 02 января 2012

У меня проблема с координатами текстуры. Сначала я хотел бы описать, что я хочу сделать, затем я задам вопрос.

Я хочу иметь меш, который имеет больше текстур, используя только одну большую текстуру. Большая текстура объединяет в себе все текстуры, используемые сеткой. Я сделал процедуру, которая объединяет текстуры, это не проблема, но мне все еще нужно изменить координаты текстуры, поэтому в сетке, которая теперь использует только одну текстуру вместо многих, все хорошо расположено.

Смотри картинку:

enter image description here

В левом верхнем углу я получил одну из текстур (назовем ее A), я слился в большую текстуру, правую (B). Верхний левый угол А равен 0,0, а нижний правый - 1,1. Для простоты предположим, что B.width = A.width * 2 и так же для высоты. Таким образом, на B мини-текстура (M - это оригинал A) внизу справа должна быть 0,5,0,5.

У меня пока нет проблем с пониманием этого, и я надеюсь, что я все понял. Но проблема здесь в том, что существуют текстурные координаты, которые:

  • выше 1
  • отрицательный

на оригинале А. Что должно быть на М?

Скажем, A имеет -0,1,0 - это -0,05,0 на M внутри B?

А как насчет тех чисел, которые находятся за пределами региона 0..1? -3,2 на А -1,6 или -3,1 на В? Таким образом, я обрезаю часть, которая является% 1, и делю на 2 (потому что я сказал выше, что ширина удваивается) или я должен разделить все число на 2? Насколько я понимаю, цифры за пределами этого региона отражают текстуру. Как мне это сделать, чтобы вывод не содержал оранжевую текстуру от B?

Если мой вопрос недостаточно ясен (я не очень хорошо владею английским языком), пожалуйста, спросите, и я отредактирую / отвечу, просто помогите мне устранить мою путаницу:)

Заранее спасибо: Петер

1 Ответ

0 голосов
/ 02 января 2012

Одна текстура имеет координаты в диапазоне [0-1,0-1]

Новая текстура имеет координаты в диапазоне [0-1,0-1]

В вашей новой текстуре, состоящей из четырех отдельных текстур, ваш алгоритм должен переводить текстурные координаты таким образом.

  • Синяя квадратная текстура будет иметь новые координаты в [ 0-0,5 , 0-0,5] диапазон
  • Оранжевая текстура с одним квадратом будет иметь новые координаты в диапазоне [ 0,5-1 , 0-0,5]
...