Итак, я нашел алгоритм сжатия текстур, который действительно хорош здесь: http://lspiroengine.com/?p=312,, но я не уверен, как выбрать подходящие индексы для моей текстуры, учитывая c0 и c1 (мин / макс).
Я использую код ryg в библиотеке STB Шона Баррета здесь https://github.com/nothings/stb/blob/e6afb9cbae4064da8c3e69af3ff5c4629579c1d2/stb_dxt.h#L215. Не уверен, что строки 227 и 230 означают вычисляемые значения.
это точечная проверка по сравнению с c0 и c3.
for(I = 0; I < 16; I++) {
dots[I] = color[0].r
}
for(I = 0; I < 16; I++)
int dot = dots[I];
mask <<= 2;
if(dot < halfpoint) {
mask |= (dot < c0point) ? 1 : 3;
} else {
mask |= (dot < c3point) ? 2 : 0;
}
Мне интересно, правильно ли это в смысле евклидова расстояния. Источник предполагает, что это не так. Я хочу, чтобы текстура была максимально правильной, прежде чем я запустил на ней стандартный бэкэнд, такой как LMZA. Если бы мне нужно было сделать разные компромиссы, я бы хотя бы использовал правильный алгоритм.