Вы можете интерпретировать эти цвета из градиента серого как 1-D координаты текстуры, а затем указать таблицу соответствия как 1-D текстуру.Кажется, это соответствует вашей ситуации.
В качестве альтернативы, вы можете использовать программу фрагментов (шейдер) для выполнения произвольных преобразований цвета на отдельных пикселях.
Еще несколько объяснений: что такое текстура?Концептуально текстура - это какая-то функция поиска, с некоторой дополнительной логикой сверху.
2-D текстура - это то, что для любой пары координат (s, t) или (x, y) вдиапазон [0,0] - [1,1] дает определенный цвет (RGB, RGBA, L, что угодно).Кроме того, он имеет некоторые настройки, такие как деформация или фильтрация.
Ниже текстура описывается дискретными данными заданной «плотности» - возможно, 16x16, возможно, 256x512.Процесс фильтрации позволяет задать цвет для любого действительного числа от [0,0] до [1,1] (путем смешивания / интерполяции соседних текселей или просто выбора ближайшего).
1-D текстура идентична, за исключением того, что она отображает только одно реальное значение в цвет.Поэтому его можно рассматривать как определенный тип «справочной таблицы».Вы можете считать, что это эквивалентно 2-D текстуре на основе изображения 1xN.
Если у вас есть градиент оттенков серого, вы можете визуализировать его напрямую, рассматривая значение градиента как цвет - или вы можете рассматривать его каккоординаты текстуры (= индексы в таблице поиска) и использование 1-D текстуры для произвольного преобразования цветового пространства.
Вам просто нужно перевести значения градиента (из диапазона 0..255) в[0..1] диапазон текстурных индексов.Я бы порекомендовал что-то вроде out = (in+0.5)/256.0
.Значение 0.5 означает смещение на половину текселя, поскольку мы хотим указывать на середину текселя (значение внутри текстуры), а не на угол между двумя значениями.
Чтобы иметь только точный Значения RGB из справочной таблицы (= 1-D текстура), также установите фильтры текстур на GL_NEAREST
.
Кстати: обратите внимание, что если вам уже нужна другая текстура для рисования градиента, то она получаетнемного сложнее, потому что вы хотите рассматривать значения, полученные из одной текстуры, как координаты для другой текстуры - и я считаю, что для этого вам понадобятся пиксельные шейдеры.Не то, чтобы шейдеры были сложными или что-то еще ... они очень удобны, когда вы изучаете основы.