Войти
ПрограммированиеФорумГрафика

Затекстурировать plane (directx)

#0
18:56, 11 мар. 2018

Нужно нарисовать цепь произвольной длины, простой вариант plane из четырех вершин и текстура. Есть текстура одного звена цепи, если ее повторить-размножить, то будет цепь. Это можно сделать, если поставить uv координаты больше единицы. К примеру вершина 1 uv(0.0), а вершина 2 uv(4.0) значит звено будет продублировано четыре раза по горизонтали.

А что делать, если звено цепи в текстурном атласе(карте)?


#1
19:41, 11 мар. 2018

Можно текстурные координаты в вертексах оставить 0..1, а в шейдере умножать на кол-во звеньев, брать дробную часть, потом умножать на размер звена в атласе относительно размера атласа о прибавлять смешение звена относительно начала атласа.

#2
12:27, 12 мар. 2018

u960
Он же описал

#3
12:43, 12 мар. 2018

Андрей5000
> Он же описал
допустим этот момент не понятен

потом умножать на размер звена в атласе относительно размера атласа
#4
(Правка: 13:22) 13:19, 12 мар. 2018

ну так идея-то простая :
- текстурные координаты задаем как для полной (в смысле - без атласа) текстуры
- в шейдер просовываем используемый кусочек того самого атласа (xt, yt, wt, ht). если текстура занимает весь атлас - то, соответственно, (0, 0, 1, 1)
- в пиксельный шейдер нам приезжают интерполированные текстурные координаты
- оставляем от них только дробную часть, и мапируем ее на рект (xt, yt, wt, ht)

то есть как-то так это получится

// u и v - текстурные координаты после интерполяции
// выделяем дробную часть
u = frac(u);
v = frac(v);
// мапируем во фрагмент текстурного атласа (XT, YT, WT, HT)
u = XT + u * WT;
v = YT + v * HT;

ПрограммированиеФорумГрафика