我想使用FTGL纹理字体(FTTextureFont)在XOR模式下渲染字体。问题是所有字符都呈现为框(人的颜色与背景颜色差异)。 渲染字体的调用包围在:
glPushAttrib(GL_ALL_ATTRIB_BITS);
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp(GL_XOR);
和
glDisable(GL_COLOR_LOGIC_OP);
glPopAttrib();
我尝试禁用深度位glDisable(GL_DEPTH_TEST)
,但它没有帮助。
答案 0 :(得分:0)
我在这个答案中找到了一个解决方案:https://stackoverflow.com/a/29313195/4174026
问题是由字形纹理中的透明像素引起的,这些像素未被排除。
在OpenGL ES版本1.0和1.1中,alpha测试函数(GL_ALPHA_TEST
)可用于丢弃透明片段:
glAlphaFunc(GL_GREATER, 0.2f); // Reject fragments with alpha < 0.2
glEnable(GL_ALPHA_TEST);
在较新版本的OpenGL ES中,可以使用自定义像素着色器:
void main() {
gl_FragColor = v_color * texture2D(u_texture, v_texCoords);
if (gl_FragColor.a <= 0.2) {
discard;
}
}