У меня есть набор данных, который составляет 256x256x18 байт (означает 256 по ширине, 256 по высоте и каждый «пиксель» составляет 18 байт).И я хочу отобразить его в обычном RGBA-изображении 256x256.
Я знал, как это сделать в CPU.Кроме того, я научился использовать texture2D
для работы с пикселями с обычными изображениями RGBA.
Интересно, можно ли использовать эти данные в качестве специальной «текстуры»?Если да, то как его сохранить и сэмплировать с помощью openGL / glsl?
// edit 20190426
некоторые подробности о рендеринге каждого фрагмента:
здесь структура 18-BYTE "pixel"
struct Element {
struct Layer layer1;
struct Layer layer2;
struct Layer layer3;
struct Layer layer4;
uint16 id2;
}
struct Layer {
uint8 weight;
uint16 id1;
uint8 light; //this will not be used
}
Между тем, существует таблица цветов приблизительно 5000 цветов для id1
и таблица приблизительно 30 цветов для id2
;
Алгоритм рендерингачто-то вроде этого:
RGBATuple renderElement(Element e) {
RGBATuple c = colorTable2[e.id2];
c = mix(colorTable1[e.layer4.id1], c, e.layer4.weight);
c = mix(colorTable1[e.layer3.id1], c, e.layer3.weight);
c = mix(colorTable1[e.layer2.id1], c, e.layer2.weight);
c = mix(colorTable1[e.layer1.id1], c, e.layer1.weight);
return c;
}
Данные считываются из файла или принимаются из сети. Все Element
формируются в виде картинки (2D матрица), они заполняют первую строку от 0 до 0 255,вторая строка от 256 до 511, ... вот и все.