Замена цветовой палитры Sprite в Pixel Shader

Я занимаюсь созданием файтинг-игры на основе спрайтов, и дошло до того, что я хочу реализовать замену цветов на изображениях во время выполнения (чтобы пользователь мог указать через интерфейс, какой именно цвет должен быть изменен на какой, и это будет сделано в одно мгновение, без прерывания загрузки экрана).
Я подумал, что это будет довольно легко достичь в пиксельном шейдере. Я попробовал это, установив значения для изменения конкретно другого цвета, и это работало довольно хорошо.
Для следующего шага я хотел сделать так, чтобы он считывал данные из текстового файла (содержащего цветовые коды цвета, который нужно изменить, а затем цвет, который нужно изменить). У него есть несколько записей, и он хранится в массиве следующим образом:

XMFLOAT3 palette[10][2];

А вот соответствующая постоянная запись в шейдере:

float4 xPalette[10][2];

Что это означает, он хранит 10 цветов для изменения и 10 цветов для их изменения. Я передаю это в пиксельный шейдер через постоянный буфер, и он не работает, как запланировано, потому что распознается только последняя запись массива, все остальные равны нулю. Я думаю, что будет потому, что 16-битное выравнивание перед отправкой данных в графический процессор? Какой еще способ отправить данные в пиксельный шейдер?
Спасибо, что прочитали это!

2

Решение

Вы можете отправить свои свопы как текстуру, возможно, вы хотите заменить верхний ряд текселей, а [x] [y + 1] — это цвет, на который вы хотите изменить его. (Поскольку координаты текстуры находятся в диапазоне от 0 до 1, вам, вероятно, придется передать в виде целого числа количество заменяемых цветов, которое вы могли бы индексировать с помощью (1 / replaceCount * i). GLSL позволяет передавать текстуры с помощью I sampler2D Я думаю, что это похоже на HLSL (хотя прошло несколько месяцев с тех пор, как я написал HLSL. :()

Затем вы можете просто сэмплировать / сравнить каждый тексель в верхнем ряду во время вашего шейдера.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]