2015-04-24 5 views
0

очистить буфер кадров ...OpenGL ES 2.0 IOS, нулевой альфа-пиксел создавая непрозрачный цвет

glClearColor(0.0, 0.0, 0.0, 0.0); 
glClear(GL_COLOR_BUFFER_BIT); 

... Я даю возможность смешивание как таковая ...

glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 
[self render] 
glDisable(GL_BLEND); 

В том, что коде визуализации, Я просто добавляю квадроцикл и рисую его. В моем шейдере фрагмента у меня есть ...

gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); 

Это дает четкий квадрат. Отлично. Нет цвета, нет альфы, нет ничего ... получилось. Тем не менее, я меняю фрагментный шейдер на ...

gl_FragColor = vec4(1.0, 0.0, 0.0, 0.0); 

Я получаю квадрат, заполненный белым. Может ли кто-нибудь объяснить мне, как заполнение квадроцикла полностью прозрачным красным цветом даст непрозрачный белый цвет, а не просто ясный?

+0

Используете ли вы глубинный буфер/глубину? –

+0

Ну, у вас есть 'GL_ONE' как первый аргумент' glBlendFunc() '. Таким образом, вы добавляете цвет фрагмента к целевому значению, независимо от альфа-значения. –

+0

@RetoKoradi справа, поэтому цвет фрагмента (1, 0, 0, 0), а цвет назначения - (0, 0, 0, 0). Добавление их вместе дает (1, 0, 0, 0), правильно? Почему конечное значение (1, 0, 0, 0) выглядит белым? Мне кажется, что это должно быть ясно, так как значение альфа составляет 0 или, по крайней мере, некоторый оттенок красного? – Herm

ответ

0

не GL_ONE_MINUS_SRC_ALPHA сделать

(1, 1, 1, 1) - (As/kA, As/kA, As/kA, As/kA) 

так, если Как 0 это приведет к (1, 1, 1, 1)?

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

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) 

Что вы получаете с различными аргументами функции смешивания?

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

  • Нет связанных вопросов^_^