2016-01-13 96 views
-1

所以我正在为我的大学任务做一个简单的opengl/SDL项目。纹理和背景混合一点

基本上是一个非常简单的游戏,角色在屏幕上移动。

我快完成了,但我遇到了一个问题。

所以,当我加载纹理等,他们混合在一起,“发光”通过对方。

下面是一个例子:

enter image description here

左 - 红色背景颜色glClearColor(1.0F,0.0F,0.0F,0.0F); 中东 - 绿色的背景颜色
右键 - 黑色背景

正如你所看到的,背景的影响在它前面的纹理,我真的不喜欢。

黑色背景是好的(使我的纹理有点暗),我可以忍受它,但正如你所看到的,黑色背景下,我们可以看到vader背后的一些纹理。

这是他的肩膀上最引人注目的。而是保持纹理完全不透明并保持原有颜色。

要删除Alpha通道,我使用

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

,但我觉得这并不是因为它融合了所有的纹理在一起,很好地做到这一点的最好办法。

有没有办法保持图像完全不透明,同时保持alpha通道,所以周围没有东西?

+2

你是什么意思“删除alpha通道”和“同时保持alpha通道”?目前还不清楚你想要做什么。 – comingstorm

+0

确保你背部的地形有1的阿尔法。 – dari

+0

我的意思是我不希望它是透明的,只是100%不透明,但同时没有任何图像的区域(如他的腿之间)应该看到通过这样我可以看到背景。 – Macko

回答

-1

好的,我修好了。 事实证明,我在着色器中有一段代码可以混合所有东西。

+1

欢迎与我们分享引起碎片混合的着色器代码片段。这样,其他遇到您的问题的人可以避免潜在的常见问题:) – Snps

+0

这是导致问题的代码片段:http://pastebin.com/UbFPdpYN 我已通过更改行编号3到: color = textureColor; – Macko