Готовый перевод Stage3D / AGAL from scratch. Part VIII – Texture, please ! / Изучаем Stage3D / AGAL с нуля. Часть VIII – Пожалуйста, текстуры !: Текстурные координаты
В первых частях этой серии уроков, мы обычно рисовали треугольники с различными цветами "привязанными" к каждой их вершине.
Мы делали это для того, чтобы понять, что любые данные, переданные из вершинного шейдера в фрагментный, подвергаются интерполяции.
Работать с текстурами относительно просто.
Также как и в случае со всеми вещами, к которым мы хотим иметь доступ в нашем шейдере, мы должны объявить текстуру, затем загрузить её в V-Ram, и после этого передать её в шейдер.
Фрагментный шейдер, или как его ещё называют, пиксельный шейдер, выполняется для каждого пикселя, который должен быть отрисован. Работа этого шейдера заключается в вычислении цвета этого пикселя.
В предыдущем примере, основной цвет для каждого пикселя просто хранился в временном регистре, всё что нам оставалось сделать, так это применить к нему немного света, и затем скопировать цвет в регистр ос (конечный цвет).
Так вот, разница при использовании текстуры заключается в том, что для определения цвета пикселя фрагментный шейдер теперь будет брать значение цвета не из временного регистра, а из образца текстуры.
Возникает вопрос: как может наш шейдер знать, из какого места текстуры брать цвет пикселя для отрисовки вершины? Ну, за это как раз и отвечают текстурные координаты.
Текстурные координаты очень просты для понимания.
Мы называем их U и V, и это одно и тоже что и X и Y в ActionScript, за исключением одного момента, они не абсолютные значения, а относительные, лежащие в диапазоне от 0 до 1.
Таким образом, вы можете изменить размер вашей текстуры (например, с 256x256 на 512x512), а ваши текстурные координаты останутся без изменений.
Довольно просто, да?
Так, для квадрата, в большинстве случаев используются текстурные координаты указанные выше.
Для треугольника, вам, возможно, придется указать первую координату равной 0.
5, 0, так как его первая точка будет находится в центре верхней стороны.
UV (на данный момент, я буду называть текстурные координаты - UV) могут быть намного более сложными, в случае если вы, например, захотите сопоставить текстуру кожи и волос с треугольниками меша, но вам не придется набирать их вручную, так как текстурные координаты могут быть экспортированы из вашего пакета 3D моделирования, наподобие 3DS Max.
Вам следует хорошо понимать предназначение UV, так как с помощью них можно творить удивительные вещи.
Изменяя UV вы можете взять только часть текстуры, если нет необходимости использовать её всю целиком.
Вы когда-нибудь слышали о листах спрайтов? Те из вас, кто уже успели поработать с Starling и были поражены скорости, с которой он рендерит тысячи анимаций знают что это такое. Это анимированный "MovieClip" реализованный на GPU: в V-Ram грузится одна большая текстура с кадрами вашей анимации, она рисуется на квадрате, затем указываются 4 UV константы, которые далее будут меняться в каждом кадре! Таким образом, в каждом кадре, GPU будет выбирать различную часть изображения из образца текстуры!
Пример листа спрайтов.
Да, старые игры тоже использовали их!
Переведено на Нотабеноиде
http://notabenoid.org/book/31845/110805
Переводчики: redefy
Настройки
Готово:
