ПрограммированиеФорумОбщее

Помогите написать шейдер (2 стр)

Страницы: 1 2
#15
15:17, 6 авг 2014

kroonk
А поделись кодом плиз.. Ну или хотя бы расскажи идею как делать.. =)

#16
15:31, 6 авг 2014

Gladiator
Код не дам, тебе нужно самому учится писать его. А вот алгоритм - пожалуйста. Вычислить куда пихать паттерны по маске - проще простого, во фрагментном шейдере нужно цвет, полученный из текстуры паттерна умножить на цвет маски (соответственно белый цвет маски выдаст цвет пикселя текстуры паттерна, а черный выдаст нулевой цвет), при этом для функции чтения из текстуры паттерна нужно передать текстурные координаты умноженные по X на ширину маски и по Y на высоту маски. А вот чтобы узнать, как получить текстурные координаты для проективного текстурирования, обратись в гугл с запросом "projective texture mapping", он разъяснит лучше, чем я.

#17
16:20, 6 авг 2014

kroonk
Спасибо.

#18
16:46, 6 авг 2014

kroonk
> , при этом для функции чтения из текстуры паттерна нужно передать текстурные
> координаты умноженные по X на ширину маски и по Y на высоту маски
и что это будет ?
берем маску 2х2 и текстуру-паттерн 8х8. По тому, что ты говоришь получается что каждый 2-й пиксел я буду пропускать ? оО

#19
17:38, 6 авг 2014

Gladiator
Нет, не будешь ты ничего пропускать, понимаешь, видеокарта будет интерполировать значения между пересланными текстурными координатами и выберет нужные пиксели сама.

Добавлено:
Вот например здесь на каждом паттерне пропущено довольно много пикселей, так как камера находится далеко.
sh_result_far | Помогите написать шейдер

А здесь, не пропущено ни одного пикселя текстуры, даже наоборот их значения интерполировались, так как детализации не хватает на таком расстоянии.
sh_result_near | Помогите написать шейдер

как видишь, размер маски(здесь 16x16) не вызывает никакого "пропуска пикселей"

#20
18:21, 6 авг 2014

На случай, если надо будет на ходу что-нибудь менять...




Красная компонента - S-координата, зелёная компонента - Т-координата.

Минус решения - зависимая выборка из текстуры, снизит производительность.

#21
17:11, 8 авг 2014
Изображение

Я так понимаю эта проблема не решаема с помощью шейдеров ?

Здесь ячейке соответствует 2х2 белых пикселя в маске. Сделано для того чтобы можно было наполовину сдвигать ячейки. Но проблему вы видите. =/

#22
14:06, 15 авг 2014

Роман Шувалов
Хочу воспользоваться тем что Вы говорили но немного по-другому..

Хочу реализовать вот это:
Изображение

для того чтобы можно было делать клетку произвольных размеров и произвольного положения(в пределах дискретности сетки)

Только вот я не знаю как этого добиться..
Я хочу сделать следующий алгоритм ну или технологию(наверное алгоритм здесь не совсем уместно говорить) :

  • На первой текстуре, которая обозначает исходную сетку сделать сетку, к примеру 8х8. При этом 2х2 клетки это в реальности минимальная клетка, собранная из 4-х уголков из картинки на верху.
  • В каждой клетке хранились бы текстурные координаты s,t как говорил Роман Шувалов
  • После выборки текстурных координат я бы в пределах этой клетки брал текстурные координаты клетки и вобщем в пределах этой клетки должна уместиться 1/3 текстуры.. Если объяснить на примере, то если мы встретили клетку с (s,t) == (0,0) то при проецировании клетки на поверхность она должна проецировать 1/3 текстуры: от 0, 0 до 1/3, 1/3
  • Вот это последнее я и не знаю как сделать..
    Сделать еще одну заранее заполненную текстуру и умножить на этот заранее предопределенный паттерн ? Но тогда надо как-то проецировать одну текстуру на другую или как ? Я немного запутался..

    #23
    14:56, 15 авг 2014

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

    #24
    15:06, 15 авг 2014

    CasDev
    Ты вообще читал что я писал ? ) Я реализовывал эту технологию на плюсах в своё время. И ничего сложного там нет. Но видишь ли беседа идёт о шейдерах, и это уже совсем другой разговор

    #25
    17:21, 15 авг 2014

    Gladiator
    Ну тогда хоть напиши смысл этого ваяния?
    где ты это будешь применять. Я у себя оставлю в заметках и когда начнется речь о человеческой глупости и велосипедалировании - буду кидать ссылку :)

    #26
    18:26, 15 авг 2014

    CasDev
    Просто есть задача и надо ее сделать. Подробности здесь ни к чему.

    Так.. Заранее извиняюсь что мелко нарисовано, просто рисовал в Паинте

    Изображение

    Итак первая картинка собсно показывает структуру. Одна логическая клетка состоит как минимум из 4-х уголков, в каждом из которых хранится текстурная координата. В моём случае шаг дискретности равен двум. Можно еще более детализировать, в зависимости от нужд. Вот. Справа нарисовано чем это может стать в простейшем случае, ну а снизу просто показано что клетки могут смещаться друг относительно друга и так как у меня шаг дискретности 2, то я могу сместиться относительно другой клетки на 1/2 ее ширины/высоты, если шаг дискретности 3 до на 1/3 и так далее..

    #27
    18:52, 17 авг 2014

    беда нынче с шойдеро-писателями )

    Страницы: 1 2
    ПрограммированиеФорумОбщее

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