Маскировка в OpenGL ES - PullRequest
0 голосов
/ 23 июня 2010

читая # 20 учебник по Nehe и вопрос здесь о маскировании, я реализовал маскирование, используя черно-белое изображение и непрозрачное изображение, однако результат совсем не тот, который ожидается (я использую OpenGL ES 1 на iPhone, так не использую шейдеры).
Источник + маска = Result
Как видно на рисунке, белый на маске не прозрачный, а черный - не исходный, а белый (!) Вот исходный код, который я использую для его рендеринга: </p> <pre><code> // we render from one big texture using coordinates // so changing rectangle will change the drawn image _pressedFrame = maskRect; glBlendFunc(GL_DST_COLOR,GL_ZERO); [super render:sender]; _pressedFrame = normalRect; glBlendFunc(GL_ONE,GL_ONE); [super render:sender];

Спасибо за любую помощь!

1 Ответ

2 голосов
/ 24 июня 2010

Чтобы метод из учебника NeHe работал правильно, фон вашего исходного изображения (т. Е. В любом месте, где изображение маски белое) должен быть полностью черным. Хотя из вашего первого изображения неясно, какой именно источник, я подозреваю, что он не черный в местах, которые становятся ярче на конечном изображении.

Однако в OpenGL ES 1.1 такая маскировка не требуется. Вы можете визуализировать изображение с альфа-маской за один проход, используя мультитекстурирование. Кроме того, если ваша маска и ваше изображение всегда рисуются вместе, вам лучше просто объединить их в одну текстуру RGBA - мультитекстурирование не требуется.

...