c – 如何在OpenGL中从纹理中删除黑色背景
作者:互联网
我正在寻找一种方法来删除24位位图的背景,同时保持主图像完全不透明,直到现在混合已经达到了目的,但现在我需要保持主位不透明.我在Google上搜索过但发现没有任何帮助,我想我可能会搜索错误的条款,所以任何帮助都会非常感激.
编辑:
对不起,我现在正在使用黑色作为背景.
解决方法:
在为OpenGL创建纹理时,您需要将纹理创建为32位RGBA纹理.创建一个缓冲区来保存这个新的32位纹理的内容并迭代你的24位位图.每次遇到背景颜色时,在新的32位位图中将alpha设置为零.
struct Color32;
struct Color24;
void Load24BitTexture(Color24* ipTex24, int width, int height)
{
Color32* lpTex32 = new Color32[width*height];
for(x = 0; x < width; x++)
{
for(y = 0; y < height; y++)
{
int index = y*width+x;
lpTex32[index].r = ipTex24[index].r;
lpTex32[index].g = ipTex24[index].g;
lpTex32[index].b = ipTex24[index].b;
if( ipTex24[index] == BackgroundColor)
lpTex32[index].a = 0;
else
lpTex32[index].a = 255;
}
}
glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, lpTex32);
delete [] lpTex32;
}
标签:c-3,c,opengl,alpha,blending 来源: https://codeday.me/bug/20190724/1520066.html