Stage3D / AGAL from scratch. Part VIII – Texture, please ! / Изучаем Stage3D / AGAL с нуля. Часть VIII – Пожалуйста, текстуры !: Текстурные координаты
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
В первых частях этой серии уроков, мы обычно рисовали треугольники с различными цветами "привязанными" к каждой их вершине. redefy 12.08.12 в 15:08 |
|
|
Мы делали это для того, чтобы понять, что любые данные, переданные из вершинного шейдера в фрагментный, подвергаются интерполяции. redefy 12.08.12 в 15:11 |
||
|
Работать с текстурами относительно просто. redefy 12.08.12 в 15:22 |
||
|
Также как и в случае со всеми вещами, к которым мы хотим иметь доступ в нашем шейдере, мы должны объявить текстуру, затем загрузить её в V-Ram, и после этого передать её в шейдер. redefy 12.08.12 в 15:25 |
||
|
Фрагментный шейдер, или как его ещё называют, пиксельный шейдер, выполняется для каждого пикселя, который должен быть отрисован. Работа этого шейдера заключается в вычислении цвета этого пикселя. redefy 12.08.12 в 15:27 |
||
|
В предыдущем примере, основной цвет для каждого пикселя просто хранился в временном регистре, всё что нам оставалось сделать, так это применить к нему немного света, и затем скопировать цвет в регистр ос (конечный цвет). redefy 12.08.12 в 15:30 |
||
|
Так вот, разница при использовании текстуры заключается в том, что для определения цвета пикселя фрагментный шейдер теперь будет брать значение цвета не из временного регистра, а из образца текстуры. redefy 12.08.12 в 15:38 |
||
|
Возникает вопрос: как может наш шейдер знать, из какого места текстуры брать цвет пикселя для отрисовки вершины? Ну, за это как раз и отвечают текстурные координаты. redefy 12.08.12 в 15:41 |
||
|
Текстурные координаты очень просты для понимания. redefy 12.08.12 в 15:43 |
||
|
Мы называем их U и V, и это одно и тоже что и X и Y в ActionScript, за исключением одного момента, они не абсолютные значения, а относительные, лежащие в диапазоне от 0 до 1. redefy 12.08.12 в 15:47 |
||
|
Таким образом, вы можете изменить размер вашей текстуры (например, с 256x256 на 512x512), а ваши текстурные координаты останутся без изменений. redefy 12.08.12 в 15:49 |
||
|
Довольно просто, да? redefy 12.08.12 в 15:50 |
||
|
Для треугольника, вам, возможно, придется указать первую координату равной 0. redefy 12.08.12 в 16:35 |
||
|
5, 0, так как его первая точка будет находится в центре верхней стороны. redefy 12.08.12 в 16:37 |
||
|
UV (на данный момент, я буду называть текстурные координаты - UV) могут быть намного более сложными, в случае если вы, например, захотите сопоставить текстуру кожи и волос с треугольниками меша, но вам не придется набирать их вручную, так как текстурные координаты могут быть экспортированы из вашего пакета 3D моделирования, наподобие 3DS Max. redefy 12.08.12 в 16:42 |
||
|
Вам следует хорошо понимать предназначение UV, так как с помощью них можно творить удивительные вещи. redefy 12.08.12 в 16:44 |
||
|
Изменяя UV вы можете взять только часть текстуры, если нет необходимости использовать её всю целиком. redefy 12.08.12 в 16:46 |
||
|
Вы когда-нибудь слышали о листах спрайтов? Те из вас, кто уже успели поработать с Starling и были поражены скорости, с которой он рендерит тысячи анимаций знают что это такое. Это анимированный "MovieClip" реализованный на GPU: в V-Ram грузится одна большая текстура с кадрами вашей анимации, она рисуется на квадрате, затем указываются 4 UV константы, которые далее будут меняться в каждом кадре! Таким образом, в каждом кадре, GPU будет выбирать различную часть изображения из образца текстуры! redefy 12.08.12 в 16:48 |
||
|
Да, старые игры тоже использовали их! redefy 12.08.12 в 16:47 |
