我有一个字体纹理,我用它来在我的OpenGL场景上绘制文字。 问题是场景的颜色变化太大,以至于我使用的任何纯色都难以阅读。是否可以用反色绘制我的字体纹理?
对glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
的调用只会用纯色绘制它,调用glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
会将其反转,但会忽略纹理的alpha值,所以你只能看到倒置矩形而不是字母。
我需要的是相当于的东西
glBlendFunc(GL_SRC_ALPHA * GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);
这可以通过某种方式实现而不使用着色器?
答案 0 :(得分:3)
问题解决了。
根据戴夫对我原帖的评论: 我没有使用GL_ALPHA纹理,而是生成每个像素相等的GL_RGBA纹理: (alpha,alpha,alpha,0xff)(这是灰度图像而不是亮度图像)。 然后我用这个纹理:
glBlendFunc(GL_ONE_MINUS_DST_COLOR,GL_ONE_MINUS_SRC_COLOR);
结果是:(1 - dest_color)x“src_alpha”+ dest_color x(1 - “src_alpha”) 这正是我所需要的。
谢谢! 罗恩
答案 1 :(得分:0)
复制要覆盖的屏幕的子部分,可以使用CPU反转此复制的部分。使用文本作为蒙版,将新制作的反转纹理绘制到屏幕上。
请注意,这很慢,毫无疑问着色器会更快。