Mc-*_*Mc- 7 iphone opengl-es cocos2d-iphone ios
我正在尝试将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];
}
Run Code Online (Sandbox Code Playgroud)
*绘制助手是绘制三角形的逻辑.
+(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);
}
Run Code Online (Sandbox Code Playgroud)
这里有一些结果:

你可以看到一个很好的近似值,但这两个图像有错误:
OpenGL错误0x0502 in - [EAGLView swapBuffers]
我的问题是:
[更新]这是我想要的一个例子(使用正确的混合):

仅在alpha为1.0的情况下将混合模式应用于图像
这听起来像是alpha测试的应用程序.只有我首先绘制矩形,然后使alpha测试失败等于1.0(或大于0.99以允许一些余量).这不需要混合.
期望的结果:
我认为你混淆了Multiply和Overlay字幕.
在所有这些情况下,这都是使用其中之一完成
glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GEQUAL, 0.995); //没有使用1.0的余地要么
glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);效果不是通过设置混合功能或模式创建的,而是通过纹理环境或着色器创建的.
" Overlay "(实际上是乘法)效果对应于GL_MODULATE纹理环境模式.或者在着色器方面gl_FragColor = texture2D(...) * color;.
" 减轻 "是min(texture2D(...), color);
" 乘法 "(实际上是叠加)是gl_FragColor = 1. - (1.-color*texture2D(...))*(1.-color);
" 柔光 "是gl_FragColor = (1. - (1.-texture2D(...))*(1.-color))*k + b;(k和b选择参数).
| 归档时间: |
|
| 查看次数: |
9380 次 |
| 最近记录: |