OpenGL混合(混合前反转纹理颜色)

时间:2012-11-16 22:11:30

标签: opengl rendering alpha blending invert

我正在为基于OpenGL的UI系统进行快速文本渲染,使用子像素渲染,黑色背景上的白色文本与"正常"混合,但白色背景上的黑色文本不会,因为子像素渲染的颜色条纹乘以0(因为是黑色),并且子像素别名丢失。

我知道这不是"正确的"方式(因为我需要分别混合每个R,G和B子像素通道),但它非常快,几乎在每种情况下看起来都很好。

为了做到这一点,我需要在"之前反转纹理颜色"完成混合,例如:

正常混合是:SourceColor * SourceAlpha + DestColor * (1 - SourceAlpha)

我想要这个:((1,1,1) - SourceColor) * SourceAlpha + DestColor * (1 - SourceAlpha)

有没有办法在没有着色器的情况下做到这一点?我认为关键是使用不同的混合设置进行两次传递,但我无法使其正常工作

我知道我可以有两种纹​​理,一种是正常的,一种是倒置的,但我不想浪费视频内存(因为每种字体都需要一个已经很大的纹理)

1 个答案:

答案 0 :(得分:0)

给你的字体纹理一个alpha通道,然后使用它来指定字体的形状,同时保持纹理中每个像素的颜色为白色,甚至是那些外面的像素(得到alpha = 0所以它们是rgba = 1110 )。然后glColor3f(r,g,b)会适当地为您的纹理着色(甚至是黑色),如果您使用glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);,它将被正确混合。

相关问题