Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Triangle strip texturing (2 стр)

Triangle strip texturing (2 стр)

Поделиться

Страницы: 1 2 3 Следующая

FordPerfectПостоялецwww7 ноя. 20178:12#15
Suslik
Так вроде достаточно 1 вектор (H) на треугольник.

Про u- я, похоже, косячу. Там на знак смотреть надо.

Забавно то, что если эти формулы вбить "как есть", они могут очень плохо себя вести (численно) на весьма безобидных, по здравому размышлению, данных.
Интересно сделать чтобы работало надёжно.

MikleМодераторwww7 ноя. 20179:36#16
Даже если найти решение для квада, лента будет ломаться на состыковках квадов.
Может стоит пересмотреть условия задачи?
*Lain*Забаненwww7 ноя. 20179:44#17
Suslik
> strip texturing
Тред не читал. Стрип текстуры можно зафотать в стрип баре.
SuslikМодераторwww7 ноя. 201710:11#18
FordPerfect
> Забавно то, что если эти формулы вбить "как есть", они могут очень плохо себя
> вести (численно) на весьма безобидных, по здравому размышлению, данных.
> Интересно сделать чтобы работало надёжно.
именно такие впечатления у меня остались с последнего раза, когда я их реализовывал лет 10 назад. писал софтварный рендер для квадов. не спрашивайте.

Mikle
> Даже если найти решение для квада, лента будет ломаться на состыковках квадов.
да, всё так. но эти сломы всё равно менее заметны, чем сломы внутри квадов. задача-то исходная формулируется примерно так:
дана линия, состоящая из последовательно заданных точек. требуется вдоль неё нарисовать длинную текстурированную полоску.

*Lain*
> Тред не читал. Стрип текстуры можно зафотать в стрип баре.
я слышал, кстати, в бане тоже можно нормально набрать. не сходишь посмотреть?

Правка: 7 ноя. 2017 10:13

MikleМодераторwww7 ноя. 201713:38#19
Suslik
> дана линия, состоящая из последовательно заданных точек. требуется вдоль неё
> нарисовать длинную текстурированную полоску.
Ширина полоски фиксирована? Есть предельный угол, острее которого изломов не будет?
А то ведь это можно решить и сплайном, прямо в шейдере.
HybernaculumПостоялецwww7 ноя. 201715:16#20
Suslik
> дана линия, состоящая из последовательно заданных точек. требуется вдоль неё
> нарисовать длинную текстурированную полоску
Для выпуклого четырёхугольника существует аналитическое решение для вычисления текстурных координат, на основе него
ещё при царе горохе в некоторых играх делали декали для изогнутых дорог на ландшафте.
На шейдерах в 2d это в разы проще, так как нет нужды дополнительно триангулировать квады под особенности ландшафта
и для минимизации изломов текстуры на стыках треугольников.

Правка: 7 ноя. 2017 15:25

SuslikМодераторwww7 ноя. 201715:24#21
Mikle
ширина фиксирована, сумасшедших поворотов обычно нет. как ты предлагаешь это решать в шейдере?

Hybernaculum
рекомендую почитать тред, хотя бы пару первых постов.

HybernaculumПостоялецwww7 ноя. 201715:30#22
Suslik
> рекомендую почитать тред, хотя бы пару первых постов.
Аналитическое решение для выпуклого четырёхугольника как раз и обеспечивает линейность вдоль каждой из сторон квада, чем оно вам не угодило ?
Кстати, в гугле по очевидным ключевым словам можно найти страничку некого испанского программиста, там есть вся математика (весьма простая
в векторном виде, самое "страшное" это вычисление одного квадратного корня от одного числа для пары u/v) и рабочий пример на шейдерах.

Правка: 7 ноя. 2017 16:03

SuslikМодераторwww7 ноя. 201717:31#23
Hybernaculum
ты тред-то всё-таки почитай, вдруг там написано чего?
MikleМодераторwww7 ноя. 201717:36#24
Suslik
> как ты предлагаешь это решать в шейдере?
В геометрическом.
А какая типичная длина ленты (в узловых точках)?
SuslikМодераторwww7 ноя. 201717:38#25
Mikle
не, у меня d3d9 feature level, как-нибудь без геометрических шейдеров. полоска очень длинная, несколько десятков тысяч пикселей. ширина — около 20-50.

Правка: 7 ноя. 2017 17:39

HybernaculumПостоялецwww7 ноя. 201718:21#26
Suslik
> ты тред-то всё-таки почитай, вдруг там написано чего?
Не беспокойтесь, тред я читал. Вот тут вы пишите что у вас проблемы с аналитическим решением для квадов. )))
То есть если найти такие коэффициенты uv преобразования для вершин вида lerp(lerp(a, b, u), (c, d, u), v) = p, то они и будут ответом. Но это — квадратное уравнение и я всё ещё не помню, как выбирал нужный корень.

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

Правка: 7 ноя. 2017 18:22

MrShoorУчастникwww7 ноя. 201722:04#27
Suslik
Накидал пример.
Формат вершины у меня вот такой (добавился всего лишь один флоат в текстурные координаты):
struct VS_Input {
    float2 vsPos : vsPos;
    float3 vsTex : vsTex;
};

Заполняю данным как-то так (в точности как в посте #8 я описывал):

+ Показать

Пиксельный шейдер такой:

PS_Output PS(VS_Output In) {
    PS_Output Out;
    In.Tex.x /= In.Tex.z;
    Out.Color = Map.Sample(MapSampler, In.Tex.xy);
    return Out;
}

Результат вот такой:
result | Triangle strip texturing
т.е. частный случай с трапециями решается крайне просто.

FordPerfectПостоялецwww8 ноя. 20170:02#28
Suslik
Где-то вроде такого:
+ Показать

Народ, проверите?

Там проверку L0≈0 наверно можно более здраво сделать.
Ну и вычислять 2-й коэффициент, видимо, можно из первого, без корня - если понять, который из них лучше считается.

Правка: 8 ноя. 2017 1:12

FordPerfectПостоялецwww8 ноя. 20171:11#29
Поправил код:
<        // Inside convex quadrilateral d>0 should hold, absent round-off.
>        // Absent round-off, d>=0 should hold inside convex quadrilateral.
<        // The denominator is only zero, when a, b, and c are all very close to zero.
>        // The denominator is only zero, when b, and a*c are both zero.
Ещё есть случай угла 180 (реально треугольник), тоже интересный.

Правка: 8 ноя. 2017 1:17

Страницы: 1 2 3 Следующая

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

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