2012-02-04 209 views
4

是否有方法指定{GL_SRC_COLOR, xxx}{xxx, GL_DST_COLOR},以便源和目标的颜色相乘,并且还确保如果GL_SRC_ALPHA = 0,结果为{GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}OpenGL混合GL_SRC_COLOR/GL_DST_COLOR

我在我的游戏世界上做了一个叠加的矩形,它从透明开始,但随着时间流逝到夜晚,叠加层变成了深蓝色和底层色彩的组合。

我尝试过{GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA}等等,如下所示。在两张照片中,左侧是没有覆盖层的白天,右侧覆盖层。

晚时间是在右边,覆盖(SRC)在全alpha

1

日时间与覆盖上是在0的α的权利。

2

的问题是,与SRC阿尔法等于零目的色彩加倍。我希望它保持不变,因此我只能在游戏过程中调整不透明度并过渡到夜晚。有没有办法做到这一点,或其他方式来达到相同的效果?

回答

3

解决了它。这比使用alpha实际更容易。我用这对覆盖:

{GL_DST_COLOR, GL_ZERO} 

最初,当你有白天,你不希望任何颜色变化可言,所以您将覆盖到{255,255,255}(白色)的颜色。 alpha不被使用,并不重要。然后这个颜色乘以目标颜色(世界背景)。随着夜间时间的临近,您可以通过仅调整叠加层的颜色来让世界变成任何你想要的颜色。如果你想要一个深蓝色,那么你应该调整其他通道(红色和绿色),留下相对更多的目的地(世界背景)的蓝色通道。以下是将颜色设置为{120, 150, 200}的效果。

1