Я пытаюсь применить BlendModes к изображению GreyScale, чтобы иметь статические ресурсы многократного использования
Я искал в интернете несколько часов и проводил собственные тесты, но не нашел решения.
Я начал с этого изображения:
И основная идея заключалась в том, чтобы нарисовать над ним прямоугольник определенного цвета и применить режим смешивания к изображению только в том случае, если альфа равна 1,0
.
Вот код (это часть проекта Cocos2d, хотя я думаю, что его можно применить к универсальному OGL ES):
-(void)draw
{
[super draw];
glBlendColor(0,255,0,255);
glBlendFunc(GL_ZERO, GL_SRC_COLOR);
glColor4ub(255, 0, 255, 255);
glLineWidth(2);
CGPoint vertices2[] = { ccp(0,100), ccp(100,100), ccp(100,0) };
[ DrawingHelper drawPolygonWithPoints:vertices2 points:3 closePolygon:YES];
}
* Помощник рисования - это логика рисования треугольника.
+(void)drawPolygonWithPoints:(CGPoint *)poli points:(int)points closePolygon:(BOOL)closePolygon
{
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, poli);
if( closePolygon )
glDrawArrays(GL_TRIANGLE_FAN, 0, points);
else
glDrawArrays(GL_LINE_STRIP, 0, points);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
}
А вот некоторые результаты:
Как видите, это хорошее приближение, но в этих двух изображениях есть ошибка:
Ошибка OpenGL 0x0502 in - [EAGLView swapBuffers]
Мои вопросы:
- Как я могу удалить или исправить эту ошибку?
- Как сохранить только альфа изображения (щит) и применить наложение смешанного цвета?
[Обновить] Это пример того, что я хотел бы (с правильными сочетаниями):