Применение яркости и контраста с OpenGL ES

Я использую следующую стенографию только для забавы! Не пробуйте anyof они, если код clearity касается Вас больше, чем количество введенных символов.

Для случаев, где doX () всегда возвращает true.

i==1 && doOne() || i==2 && doTwo() || i==3 && doThree()

Ofcourse я пытаюсь удостовериться, чтобы большинство пустых функций возвратилось 1 просто, чтобы гарантировать, что эти стенографии возможны.

можно также обеспечить присвоения.

i==1 && (ret=1) || i==2 && (ret=2) || i==3 && (ret=3)

Как instad записи

if(a==2 && b==3 && c==4){
    doSomething();
else{
    doOtherThings();
}

Запись

a==2 && b==3 && c==4 && doSomething() || doOtherThings();

И в случаях, где не уверенный, что возвратит функция, добавляют || 1 :-)

a==2 && b==3 && c==4 && (doSomething()||1) || doOtherThings();

я все еще нахожу, что он быстрее вводит, чем использование всех их если еще и он верные волнения все новые новички. Вообразите полную страницу оператора как это с 5 уровнями расположения с отступом.

, "если" редко в некоторых моих кодах и я дал ему имя "при программировании" :-)

6
задан Nosredna 4 October 2009 в 21:48
поделиться

3 ответа

Вы можете визуализировать изображение с регулировкой яркости в текстуру фреймбуфера того же размера, затем выполните регулировку контраста при рендеринге этой текстуры на экране.

Image -> [Brightness] -> Texture -> [Contrast] -> Screen

Некоторые полезные сведения о фреймбуферах и рендеринге в текстуру:

1
ответ дан 16 December 2019 в 21:43
поделиться

Это гораздо проще сделать с фрагментным шейдером, по крайней мере, в OpenGL 2.1 (я не использовал OpenGL ES). В книге «OpenGL Shading Language» обработка изображений рассматривается в главе 19. Они предоставляют шейдеры для настройки яркости и контрастности. Вот моя версия, которая сочетает в себе две половинки:

uniform sampler2D Texture;
uniform float Brightness;
uniform float Contrast;
uniform vec4 AverageLuminance;

void main(void)
{
   vec4 texColour = texture2D(Texture, gl_TexCoord[0].st);
   gl_FragColor = mix(texColour * Brightness, 
      mix(AverageLuminance, texColour, Contrast), 0.5);
}

Edit: еще несколько деталей для полноты ...

Яркость и контраст имеют базовое значение 1.0, поэтому передавая это значение для обоих оставит текстуру без изменений. Значение меньше 1.0 уменьшит яркость, а значение больше 1.0 увеличит его. Значение контрастности меньше 1,0 сделает текстуру более серой (меньше контрастности), а значение больше 1,0 сделает ее менее серой (больше контраста).

Вы можете передать (0,5, 0,5, 0,5, 1,0) для AverageLuminance для быстрого и грязного значения серого, но лучшие результаты будут получены при вычислении правильной средней яркости для вашей текстуры.

7
ответ дан 16 December 2019 в 21:43
поделиться

Мой GL немного ржавый, но из примера code они оба создают текстуру для смешивания с существующей сценой. Поэтому вы можете просто создать обе текстуры, убедившись, что они не наступают друг на друга, и затем смешать их обе на месте. Но они делают разные вещи, поэтому я сомневаюсь, что вы сможете комбинировать их в одной текстуре. Я бы сначала заказал контраст, так как это более сложная смесь.

0
ответ дан 16 December 2019 в 21:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: