【发布时间】:2012-01-07 17:01:49
【问题描述】:
我正在尝试将 BlendModes 应用于 GreyScale 图像以获得可重用的静态资源
我已经在互联网上搜索了几个小时,并进行了自己的测试,但没有找到任何解决方案。
我从这张图片开始:
基本思想是在其上以某种颜色绘制一个矩形,并仅在 alpha 为 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];
}
*Draw helper 是绘制三角形的逻辑。
+(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 在 -[EAGLView swapBuffers]
我的问题是:
- 如何删除或修复此错误?
- 如何只保留图像的 alpha(屏蔽)并应用混合叠加颜色?
[更新]这是我想要的示例(使用正确的混合):
【问题讨论】:
-
您能添加一张您想要的“photoshopped”图像吗?当我与艺术家一起工作时,从包含所有图层的 Photoshop 文件中制作着色器或后处理过滤器比文字描述要容易得多。你知道,一张图片 → 1000 字。
-
完成@datenwolf,希望对您有所帮助。
-
如果您打算在应用程序中使用该横幅,请注意:足球队的横幅是商标。您不得以任何您希望的方式使用它们。例如,以宣传您的应用程序或使其看起来正式或类似的方式使用横幅很可能是商标侵权。一些合理使用可能适用,例如在体育应用程序中使用球队横幅显示联赛结果,但即便如此也可能需要获得 FIFA、UEFA 或其他组织的批准。
-
不,这只是测试资产 :) 感谢@LearnCocos2D 的建议
标签: iphone ios opengl-es cocos2d-iphone