glBlendFunc() with 32-bit RGBA textures
我的纹理是半透明的,在不同位置具有不同的不透明度。我有主纹理位图和蒙版位图。当程序执行时,来自掩码位图的alpha值将被加载到主纹理位图的alpha值中。我要透明的区域的值为255,而我要保持完全不透明的区域的值为0。中间透明度也有介于中间的值。
我尝试了所有形式的glBlendFunc()设置,但是它要么完全不可见,要么作用于源纹理的RGB颜色。
通常在OpenGL中,0表示透明,而255不透明,与您的相反。
类似这样:
1
| glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); |
应该工作。
- 我刚试过假定纹理是透明的,到处都是黑色。
-
@ old-school规则:确定绘制时,帧缓冲区中是否有黑色以外的东西?你的透明色是什么?如果为黑色,请尝试使用其他东西,以查看是否为绘图订单问题。
-
我将再次仔细检查所有内容...我将背景清除为红色以查看透明度的工作原理,但是现在严重地将其抬高了。
-
我能得到的最接近的是glBlendFunc(GL_SRC_ALPHA,GL_SRC_COLOR),但这使所有不是黑色的东西都透明了……Alpha值似乎在那里没有任何影响
-
@ old-school规则:您的纹理颜色是透明的黑色吗?我认为您没有正确创建原始纹理。您所描述的听起来像纹理的声音被视为完全alpha = 0。
-
是的,看起来像...我将尝试一些不同的配色方案,并检查图像的二进制转储
-
好的,所以我更改了纹理位图,以便在需要透明度的区域中蒙版为白色...在纹理中,该区域也为白色...我将通过所有glBlendFunc()设置,仍然表现相同...:| VS冻结了我的每一个版本,这真的让我感到不安
-
@ old-school规则:您不需要通过BlendFunc测试。如果您的纹理数据正确,我很确定我给您的那张纸应该表现出来。检查您生成原始纹理贴图的精确度(将颜色和遮罩组合在一起时),这就是问题所在(如果需要,可以共享代码)。
-
当我使用GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA时,它是完全不可见的
-
有很多东西,我认为它不适合放在这个盒子里……它是一个渲染器,调用一个图像库,调用opengl ...
-
您提供的代码在纹理上提供了白色背景,没有透明度...:|谢谢你的帮助,但我想我会整天待在这里
-
@ old-school规则:是的,alpha / 1-alpha是标准的GL透明度。由于您的纹理数据全部为alpha = 0,因此一切都变得透明。您的纹理数据没有正确的Alpha。
-
哇,我是个白痴...你是对的...我只是把它丢了,alpha值仍然是0
我有同样的问题。我正在使用SDL_Image加载图像。我意识到在转换图像时,我使用的是SDL_DisplayFormat而不是SDL_DisplayFormatAlpha。这解决了我的问题。