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

Triangle strip texturing (2 стр)

Страницы: 1 2 3 Следующая »
#15
8:12, 7 ноя 2017

Suslik
Так вроде достаточно 1 вектор (H) на треугольник.

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

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

#16
9:36, 7 ноя 2017

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

#17
9:44, 7 ноя 2017

Suslik
> strip texturing
Тред не читал. Стрип текстуры можно зафотать в стрип баре.

#18
10:11, 7 ноя 2017

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

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

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

#19
13:38, 7 ноя 2017

Suslik
> дана линия, состоящая из последовательно заданных точек. требуется вдоль неё
> нарисовать длинную текстурированную полоску.
Ширина полоски фиксирована? Есть предельный угол, острее которого изломов не будет?
А то ведь это можно решить и сплайном, прямо в шейдере.

#20
15:16, 7 ноя 2017

Suslik
> дана линия, состоящая из последовательно заданных точек. требуется вдоль неё
> нарисовать длинную текстурированную полоску
Для выпуклого четырёхугольника существует аналитическое решение для вычисления текстурных координат, на основе него
ещё при царе горохе в некоторых играх делали декали для изогнутых дорог на ландшафте.
На шейдерах в 2d это в разы проще, так как нет нужды дополнительно триангулировать квады под особенности ландшафта
и для минимизации изломов текстуры на стыках треугольников.

#21
15:24, 7 ноя 2017

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

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

#22
15:30, 7 ноя 2017

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

#23
17:31, 7 ноя 2017

Hybernaculum
ты тред-то всё-таки почитай, вдруг там написано чего?

#24
17:36, 7 ноя 2017

Suslik
> как ты предлагаешь это решать в шейдере?
В геометрическом.
А какая типичная длина ленты (в узловых точках)?

#25
17:38, 7 ноя 2017

Mikle
не, у меня d3d9 feature level, как-нибудь без геометрических шейдеров. полоска очень длинная, несколько десятков тысяч пикселей. ширина — около 20-50.

#26
18:21, 7 ноя 2017

Suslik
> ты тред-то всё-таки почитай, вдруг там написано чего?
Не беспокойтесь, тред я читал. Вот тут вы пишите что у вас проблемы с аналитическим решением для квадов. )))

То есть если найти такие коэффициенты uv преобразования для вершин вида lerp(lerp(a, b, u), (c, d, u), v) = p, то они и будут ответом. Но это — квадратное уравнение и я всё ещё не помню, как выбирал нужный корень.

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

#27
22:04, 7 ноя 2017

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
т.е. частный случай с трапециями решается крайне просто.

#28
0:02, 8 ноя 2017

Suslik
Где-то вроде такого:

+ Показать

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

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

#29
1:11, 8 ноя 2017

Поправил код:

<        // 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 (реально треугольник), тоже интересный.

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.