Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Затекстурировать plane (directx)

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

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

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

MikleМодераторwww11 мар. 201819:41#1
Можно текстурные координаты в вертексах оставить 0..1, а в шейдере умножать на кол-во звеньев, брать дробную часть, потом умножать на размер звена в атласе относительно размера атласа о прибавлять смешение звена относительно начала атласа.
Андрей5000Постоялецwww12 мар. 201812:27#2
u960
Он же описал
u960Постоялецwww12 мар. 201812:43#3
Андрей5000
> Он же описал
допустим этот момент не понятен
потом умножать на размер звена в атласе относительно размера атласа
Lion007Постоялецwww12 мар. 201813:19#4
ну так идея-то простая :
- текстурные координаты задаем как для полной (в смысле - без атласа) текстуры
- в шейдер просовываем используемый кусочек того самого атласа (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;

Правка: 12 мар. 2018 13:22

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

2001—2018 © GameDev.ru — Разработка игр