2015-07-14 5 views
0

Вот отрывок из Основ Питера Ширли компьютерной графики:текстурирования (и, v) значения

11.1.2 текстурных массивов

Будут считать два измерения, которые будут отображенными называется U и v. Мы также предполагаем, что у нас есть изображение nx и ny, которое мы используем в качестве текстуры. Как-то нам нужно, чтобы каждый (u, v) имел соответствующий цвет, найденный из изображения . Достаточно стандартный способ сделать текстурирование для (u, v) равен , сначала удалите целочисленную часть (u, v) так, чтобы она лежала в квадрате . Это приводит к «склеиванию» всей плоскости uv с копиями текстуры теперь квадратной формы. Затем мы используем одну из трех стратегий интерполяции , чтобы вычислить цвет изображения для координат .

Мой вопрос: Какая целая часть (u, v)? Я думал, что u, v равно 0 < = u, v < = 1.0. Если существует целочисленная часть, мы не должны делить u, v на ширину и высоту изображения текстуры, чтобы получить нормализованные значения u, v?

ответ

3

УФ-значения могут быть меньше 0 или больше 1. Причина отказа от целочисленной части заключается в том, что значения УФ используют дробную часть при индексировании текстур, где (0,0), (0,1), (1 , 0) и (1,1) соответствуют углам текстуры. Разрешение значения UV для значений, выходящих за пределы 0 и 1, позволяет эффекту «черепицы» работать.

Например, если у вас есть прямоугольник, углы которого индексируются с УФ-точками (0,0), (0,2), (2,0), (2,2) и при условии, что текстура установлена чтобы нарисовать прямоугольник, тогда на этом прямоугольнике будут нарисованы четыре копии текстуры.

Значение целочисленной части значения UV зависит от режима обертывания. В OpenGL, например, существует, по меньшей мере, три режима обертывания:

  • GL_REPEAT - Целая часть игнорируется и не имеет значения. Это то, что позволяет текстурам плитку, когда значения UV превышают 0 и 1.
  • GL_MIRRORED_REPEAT - Дробная часть зеркалируется, если целочисленная часть нечетна.
  • GL_CLAMP_TO_EDGE - Значения больше 1 прижимаются к 1, а значения меньше 0 зажаты 0.
2

ответ Peter O превосходен. Я хочу добавить точку высокого уровня, что системы координат, используемые в графике, являются соглашением, которое люди просто придерживаются как стандартом дефакто - здесь нет закона природы, и это произвольно (но достойный стандарт, слава богу). Я думаю, что одна из причин, по которой текстурное картирование часто сбивает с толку, заключается в том, что произвол этого эталона не очевиден. Это то, что изображение имеет де-факто систему координат на единичном квадрате [0,1]^2. Дайте мне (u, v) на единичном квадрате, и я скажу вам точку на изображении (например, (0.2.0.3) на 20% вправо и 30% вверх от нижнего левого угла изображения). Но что, если вы дадите мне (u, v), который находится вне [0,1]^2, как (22,7, -13,4)? Некоторое правило используется для того, чтобы сделать это на [0,1]^2, и описанные режимы GL - это просто различные полезные хаки для решения этого случая.

+0

Какой бы случай, когда (u, v) находится снаружи [0,1]^2? Часто сетка загружается из .obj или некоторого файла, и мы указываем, что координаты текстуры находятся между 0 и 1. Почему и когда мы когда-либо будем использовать u, v координаты вне [0,1]^2? – JayC