Opengl,Ruby,glBlendFunc:将透明图像放在彼此上方,就好像它是不透明的

4
我不确定glBlendFunc是否是解决我的问题的好方法,但我认为我需要它!这是我的问题:
你看到右边两棵松树的倒影了吗?我想要像这样的东西:
那么,我需要一种方法,它可以像不透明图像一样显示,但使用透明图像。在glBlendFunc中是否有特殊组合,还是应该通过其他方式进行处理?
1个回答

1
我认为单纯的混合方法行不通。在两个重叠的树反射的情况下,第一个反射被渲染后与水混合。当你绘制第二棵树时,你只想让第二棵树与水混合。但是帧缓冲区中水的颜色已经与第一棵树混合,所以仅有水的颜色不再存在于帧缓冲区中。
三种方法浮现在脑海中:
1. 将所有的树反射绘制到一个FBO中,不进行混合。然后在水面上方绘制结果,并启用混合。
2. 在绘制反射时保持深度测试启用(如果当前未启用)。从前往后绘制树的反射,相对于水面略微偏移,并且每个反射绘制的偏移量逐渐减小。因此,较近的树的反射将隐藏更远处的树的反射。
3. 与选项2类似。但是,使用模板测试来确保任何像素上只呈现一个反射的树。

非常感谢!我使用了你的第二个解决方案,它完美地解决了问题!实际上,我已经在Y轴上有一个偏移量,但是每次反射后它都会增加。此外,我以错误的方式读取了我的精灵数组,现在反射是完美的! - Nat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接