Я вижу слегка разомкнутый цвет/альфа-выход из OpenGL в Linux. Вместо того, чтобы видеть значение красного компонента 1.0, я вижу ~ .96988. Например, у меня есть полностью красный прямоугольник (красный компонент = 1.0, alpha = 1.0, зеленый и синий - ноль). Это затемнение происходит, если я включу свои шейдеры вершин/фрагментов или нет.OpenGL цвет/альфа-выход немного тускнеет
Освещение отключено, поэтому в расчет цвета не следует включать окружающий или другой свет.
glBegin(GL_POLYGON);
glColor4f(1.0, 0.0, 0.0, 1.0);
glVertex2f(0.0, 0.0);
glVertex2f(1.0, 0.0);
glVertex2f(1.0, 1.0);
glVertex2f(0.0, 1.0);
glEnd();
Я принимаю снимок экрана результирующего окна, а затем загрузить изображение в программе рисования и изучения какого-либо конкретного пикселя. Я вижу красное целочисленное значение компонента 247 вместо 255, как я ожидал. Когда я запускаю это с вершинным шейдером, я вижу, что компонент gl_Color.r уже равен < 1.0, а также компонент gl_Color.a.
Все состояния OpenGL имеют значения по умолчанию. Что мне не хватает?
Редактировать в связи с вопросом: Я определил, что значение красного компонента было ~ .96988 необоснованным и итеративным процессом проверки его в вершинном шейдере и изменением синего компонента для сигнала, когда красный компонент был выше пороговое значение. Я продолжал уменьшать постоянную ценность трэшольда, пока я больше не увидел фиолетового. Это сделало трюк:
if(gl_Color.r > 0.96988)
{
gl_Color.b = 1.0; \\ show purple instead of the slightly dimmed red.
}
Edit:
//VERTEX SHADER
varying vec2 texture_coordinate;
void main()
{
gl_Position = ftransform();
texture_coordinate = vec2(gl_MultiTexCoord0);
gl_FrontColor = gl_Color;
}
//FRAGMENT SHADER
varying vec2 texture_coordinate;
uniform sampler2D Texture0;
void main(void)
{
gl_FragColor = texture2D(Texture0, texture_coordinate) * gl_Color;
}
Texture0 в данном случае является полностью насыщенным красным прямоугольником красного = 1,0, альфа = 1,0. Без текстуры, используя вершинный цвет, я получаю те же результаты; слегка уменьшенный красный и альфа-компонент.
Еще одна вещь: каналы красного и Aplha «тускнеют» на ту же сумму. Так что что-то вызывает затемнение всего цветового компонента. И, как я сказал в основном вопросе, это происходит независимо от того, использую ли я шейдеры или конвейер фиксированной связи.
Просто для удовольствия я выполнил аналогичный тест в Windows с использованием DirectX, и это привело к появлению прямоугольника с красным компонентом 254; все еще слегка тускнело, но едва.
Могу я узнать, где вы видите значение ~ .96988. Я предполагаю, что это нормально работает со значениями с плавающей запятой. –
У вас есть работающий с композитором? Если да, убедитесь, что он не играет в игры с выходом вашего окна через плагин или что-то подобное. – genpfault
Есть ли у водителя гамма-набор? –