Stage3D / AGAL from scratch. Part VIII – Texture, please ! / Изучаем Stage3D / AGAL с нуля. Часть VIII – Пожалуйста, текстуры !: Текстурные координаты

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

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

redefy 12.08.12 в 15:08

0

Мы делали это для того, чтобы понять, что любые данные, переданные из вершинного шейдера в фрагментный, подвергаются интерполяции.

redefy 12.08.12 в 15:11

0

Работать с текстурами относительно просто.

redefy 12.08.12 в 15:22

0

Также как и в случае со всеми вещами, к которым мы хотим иметь доступ в нашем шейдере, мы должны объявить текстуру, затем загрузить её в V-Ram, и после этого передать её в шейдер.

redefy 12.08.12 в 15:25

0

Фрагментный шейдер, или как его ещё называют, пиксельный шейдер, выполняется для каждого пикселя, который должен быть отрисован. Работа этого шейдера заключается в вычислении цвета этого пикселя.

redefy 12.08.12 в 15:27

0

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

redefy 12.08.12 в 15:30

0

Так вот, разница при использовании текстуры заключается в том, что для определения цвета пикселя фрагментный шейдер теперь будет брать значение цвета не из временного регистра, а из образца текстуры.

redefy 12.08.12 в 15:38

0

Возникает вопрос: как может наш шейдер знать, из какого места текстуры брать цвет пикселя для отрисовки вершины? Ну, за это как раз и отвечают текстурные координаты.

redefy 12.08.12 в 15:41

0

Текстурные координаты очень просты для понимания.

redefy 12.08.12 в 15:43

0

Мы называем их U и V, и это одно и тоже что и X и Y в ActionScript, за исключением одного момента, они не абсолютные значения, а относительные, лежащие в диапазоне от 0 до 1.

redefy 12.08.12 в 15:47

0

Таким образом, вы можете изменить размер вашей текстуры (например, с 256x256 на 512x512), а ваши текстурные координаты останутся без изменений.

redefy 12.08.12 в 15:49

0

Довольно просто, да?

Так, для квадрата, в большинстве случаев используются текстурные координаты указанные выше.

redefy 12.08.12 в 15:50

0

Для треугольника, вам, возможно, придется указать первую координату равной 0.

redefy 12.08.12 в 16:35

0

5, 0, так как его первая точка будет находится в центре верхней стороны.

redefy 12.08.12 в 16:37

0

UV (на данный момент, я буду называть текстурные координаты - UV) могут быть намного более сложными, в случае если вы, например, захотите сопоставить текстуру кожи и волос с треугольниками меша, но вам не придется набирать их вручную, так как текстурные координаты могут быть экспортированы из вашего пакета 3D моделирования, наподобие 3DS Max.

redefy 12.08.12 в 16:42

0

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

redefy 12.08.12 в 16:44

0

Изменяя UV вы можете взять только часть текстуры, если нет необходимости использовать её всю целиком.

redefy 12.08.12 в 16:46

0

Вы когда-нибудь слышали о листах спрайтов? Те из вас, кто уже успели поработать с Starling и были поражены скорости, с которой он рендерит тысячи анимаций знают что это такое. Это анимированный "MovieClip" реализованный на GPU: в V-Ram грузится одна большая текстура с кадрами вашей анимации, она рисуется на квадрате, затем указываются 4 UV константы, которые далее будут меняться в каждом кадре! Таким образом, в каждом кадре, GPU будет выбирать различную часть изображения из образца текстуры!

Пример листа спрайтов.

redefy 12.08.12 в 16:48

0

Да, старые игры тоже использовали их!

redefy 12.08.12 в 16:47

0
Минутку...