Как визуализировать текстуру в градациях серого без использования фрагментных шейдеров? (OpenGL)

Можно ли нарисовать текстуру RGB в оттенках серого без использования фрагментных шейдеров, используя только фиксированный конвейер openGL?

В противном случае мне пришлось бы создать две версии текстуры: одну цветную, а другую - черно-белую.


person JBeurer    schedule 18.03.2013    source источник


Ответы (2)


Я не знаю, как это сделать с текстурой RGB и фиксированным конвейером функций.

Если вы создаете текстуру из исходных данных RGB, но задаете внутренний формат как GL_LUMINANCE, OpenGL преобразует данные цвета в оттенки серого за вас. Используйте стандартный белый материал и режим MODULATE.

Надеюсь это поможет.

person Hugh Fisher    schedule 18.03.2013
comment
IIRC OpenGL будет просто использовать канал R для яркости, если это будет делать (или он может использовать невзвешенное среднее). Мне пришлось бы изучить спецификацию, но результаты, вероятно, сейчас соответствуют желаемому. - person datenwolf; 18.03.2013

Нет. Объединители среды текстур не могут выполнять точечный продукт без операции масштабирования / смещения. То есть он всегда делает вид, что значения [0, 1] закодированы как значения [-1, 1]. Поскольку вы не можете отключить это, вы не можете сделать правильный скалярный продукт.

person Nicol Bolas    schedule 18.03.2013