2013-08-11 2 views
0

Мне нужно установить цвет по типу байтов или целому числу, а не поплавковым значениям. Как назначить этот тип gl_FragColor? Разделение значения на 256 не даст мне нужную точность. Моя основная цель - узнать конкретное значение каждого бита в цветовом буфере, если я рисую линию только с определенным цветом. например, я хочу, чтобы в буфере цвета при красном значении пикселя было включено только 2 lsbits, какое значение цвета я должен передать на gl_FragColor? Если бы у меня была возможность писать значения типа байта, я бы записал значение 3 в красный компонент СпасибоНазначение целочисленных значений для цвета в opengl es 2.0

+0

Если вы используете glVertexAttribPointer для отправки своих данных, установите для параметра * normalized * значение true и укажите свои данные как int. – Kimi

ответ

2

Насколько я знаю, gl_FragColor всегда должен быть плавающей точкой. Однако, если вы знаете, что цветной буфер составляет 8 бит на канал, не должно быть трудно заставить все, что вы хотите в него. Вы можете рассмотреть

gl_FragColor = vec4(floor(number)/255.0, 0, 0, 0); 

например. Более поздние версии GLSL поддерживают побитовые операции, но я сомневаюсь, что GLES2 делает.

Если вы хотите, чтобы привлечь к конкретным битам, может быть ...

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE); 

...

gl_FragColor = vec4(pow(2.0, bitIndex)/255.0, 0, 0, 0); 

Я не проверял это, но не вижу причин, почему она не может работать предполагая, что геометрия никогда не перекрывается (в этом случае бит переполнится в следующий).

+0

Спасибо, я проверю – user893269

Смежные вопросы