2012-01-01 6 views
0

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

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

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

enter image description here

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

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

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

Петер

ответ

0

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

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

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

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

Я вижу. Как насчет тех координат, которые выходят за пределы диапазона? Есть ли там правило для перевода? (Сделать [0-0.5,0-0.5] из [0-1,0-1] просто простое деление, но как насчет того, что координата в [0-1,0-1] не находится в зоне действия, но 1,3 или -4,7 и т. д.?) –

+1

вы должны прочитать это [текстурное сопоставление] (http://msdn.microsoft.com/en-us/library/bb976075 (v = xnagamestudio.31) .aspx), это примерно xna 3.1, но информация действительна, хотя в xna 4.0 у вас есть только три режима адресации wrap, mirror и clamp. Вы всегда должны работать одинаково для значений внутри и вне диапазона, вопрос в том, какой режим текстурной адресации используется ... если это не зажим, у вас проблемы, потому что повторить обертку и добавление зеркала не стоит – Blau

Смежные вопросы