Opengl es 在OpenGL ES中,照亮映射到四边形的纹理的简单方法是什么?

Opengl es 在OpenGL ES中,照亮映射到四边形的纹理的简单方法是什么?,opengl-es,colors,Opengl Es,Colors,我正在显示使用应用于四边形的多个纹理(具有透明度)构建的二维精灵。我已经为glDrawArrays启用了颜色数组,并且知道如何使用它来更改每种颜色的比率并使纹理变暗(即,将所有颜色减少到相同的数量) 这都是使用预乘alpha和以下各项完成的: glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 有没有一个简单的方法来照亮纹理呢 我尝试使

我正在显示使用应用于四边形的多个纹理(具有透明度)构建的二维精灵。我已经为glDrawArrays启用了颜色数组,并且知道如何使用它来更改每种颜色的比率并使纹理变暗(即,将所有颜色减少到相同的数量)

这都是使用预乘alpha和以下各项完成的:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
有没有一个简单的方法来照亮纹理呢

我尝试使用GL_ADD,但这会导致整个四边形变得可见(即,以前透明的像素不再可见)


谢谢。

这很简单:在您想要照亮的区域上绘制另一个四边形,并使用

glBlendFunc(GL10.GL_DST_COLOR, GL10.GL_ONE);
这意味着您将基础颜色(dst,GL_ONE)保持原样,并添加相同颜色的另一部分(src,GL10.GL_dst_color)

添加的分数由四元体的颜色指定,因此现在可以通过将叠加四元体的顶点颜色设置为{0.0f,0.0f,0.0f}(无增亮)到{1.0f,1.0f,1.0f}(“亮度加倍”)来调整亮度。当然,您也可以通过调整因子来增加单个颜色的亮度

祝你好运


干杯,阿尔特。

这不会导致完全透明的像素不再透明吗?不,它不会改变你正在绘制的精灵!你只是在它上面叠加了一个加亮的四边形。我目前正在使用一个不同的混合函数来防止我的预乘alpha纹理出现瑕疵(GL_ONE,GL_ONE_减去SRC_alpha)。我假设我会将BlendFunc更改为您推荐的,然后再返回以保持现有的行为。我正在使用glDrawArrays来减少draw调用,因此我必须了解这是如何与OGL-ES编码风格配合使用的。如果您推荐任何与GLDrawArray(或glDrawElements)混合使用的技巧或示例,我将不胜感激,因为我在其他地方没有找到。不管怎样,谢谢你的回复。是的,你将不得不为那些重叠四边形做一个单独的绘制调用,因为你必须在它们之间切换状态机。所以你会有(1)glBlendFunc(GL_ONE,GL_ONE减去SRC_ALPHA),(2)gldrawerelements(精灵)(3)glBlendFunc(GL_DST_COLOR,GL_ONE)(4)gldrawerelements(增亮四边形)。除非你有几十个抽签电话,否则你不会担心额外的抽签电话。或者,您可以使用多重纹理,请参见[有关一个好的示例。这与一个四边形实现相同,但设置起来有点棘手。干杯!