我认为我没有任何语法错误,只是了解alpha的问题 使用OpenGL在纹理四边形上完成。 (mesa 9.0 under centos 6.3,这是我认为的opengl 4.2)
我有一个用glTexImage上传的字体(我已经尝试过GL_ALPHA,GL_RED和当前的GL_RGBA)。我非常肯定alpha字母通道设置在字母上并且在背景上没有设置,因为我把像素调整并手动设置。
因此,为了澄清,TexImage在字母像素上包含红色0xff0000,在背景像素上包含黑色0x000000,在红色像素上包含alpha设置为0xff,否则为0x00。
我做了:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE );
前
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,
face->glyph->bitmap.width, face->glyph->bitmap.rows,
0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, new_buffer );
显示字形时:
glBindTexture(GL_TEXTURE_2D, ascii_textures[100] );
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
// Then draw the box
glBegin(GL_QUADS);
glTexCoord2i( 0, 0 );
glVertex2f( ... // bottom left
glTexCoord2i( 0, 1 );
glVertex2f( ... // top left
glTexCoord2i( 1, 1 );
glVertex2f( ... // top right
glTexCoord2i( 1, 0 );
glVertex2f( ... // bottom right
glEnd();
我明白了(我在视频上画了红色'd'):
如果我取消注释glColor系列,我会得到:
如果我不使用纹理,我会得到一个半透明的暗盒,所以很明显混合是有效的。
看来OpenGL正在从glColor4f语句中提取alpha值,而不是从纹理中提取。
无论如何要让它看看纹理而不是颜色?
我真正在做的是尝试将我预加载的字形作为纹理进行遮罩或剪裁,因此其他方法也会受到欢迎(尽管可能不是过度字体,因为我在某些时候需要复杂的unicode字形) )
答案 0 :(得分:0)
我会关闭这个,因为我在外面画了一个解决方法 OpenGL然后上传整个纹理。不是我的意思 想要,但现在会工作。