2011-07-20 11 views
0

我在iPhone上使用openGL和编程。即使我正在使用添加剂混合,我如何才能使发光保持与背景相同的颜色?

我在我的游戏场景之上渲染一个发光的“光束”。我正在使用添加剂混合的几个纹理来制作发光效果。如果光束呈现在纯黑色的背景上,光束将完全按照我想要的方式呈现,但是,当光束在我不断变化的游戏中呈现时,它会与其背后的颜色混合。

目前,这是我唯一的想法:

1)渲染束纹理和借鉴使用正常的混合背景纹理。

问题 - 纹理将永远是不透明的(黑色是我的glClear颜色)。我还不知道如何从我渲染的纹理中移除所有黑色。

有什么建议吗?

回答

1

您可以渲染到具有alpha通道的纹理并将其混合。但是这会再次改变你的光束的外观。混合总是会引起外观的一些变化,你无法绕过这个。

的混合配方是

Destination = Incoming * Incoming_Blend_Factor + Original * Original_Blend_Factor 

如果你希望你的颜色是这相当于

Destination = Incoming 

其中,通过系数的对比是

Destination = Incoming * 1 + Original * 0 

相同,即通过不混合。


作为练习,我给你以下几点:在Photoshop或GIMP但一些背景图像到背景层和你的梁成在它上面的一层。然后尝试通过修改可用的混合模式来获得所需的结果。

+0

谢谢你的回应。我所做的是渲染我的发光光束,使用阿尔法混合使它看起来'发光',纹理。我认为我可以使用常规混合渲染纹理到我的背景,但可悲的是,情况并非如此 - 光束仍然混合到背景中。 我的最终目标是创建一个可以在任何地方绘制的荧光光束,而不会与背景混合。有任何想法吗? – 3rdFunkyBot

+0

想想这个:如果你的背景是一个明亮的背景(可能是透过天空可见的窗口)会怎么样?特别是荧光束总是需要混合。它是一些不透明的东西,那么你可以使用alpha测试,但这不会让背景发光。最终你的问题是帧缓冲区中的像素饱和。您可以使用HDR渲染,但这不会帮助您在最后的合成阶段过度曝光。 – datenwolf

相关问题