繁体   English   中英

Opengl,Ruby,glBlendFunc:将透明图像放在彼此的顶部,就好像它是不透明的一样

[英]Opengl, Ruby, glBlendFunc: place transparent images on top of each others as if it was opaque

我不确定glBlendFunc是否是解决我的问题的好功能,但我认为我需要它! 这是我的问题:

在此输入图像描述

你看到两棵松树在右边反射了吗? 我想要有类似的东西:

在此输入图像描述

然后,我需要一种与不透明图像相同的显示方法,但需要透明图像。 glBlendFunc中是否有特殊组合,还是应该通过其他方式进行?

我认为纯混合方法不会起作用。 如果您有两个重叠的树反射,第一个树在渲染后与水混合。 绘制第二棵树时,您只需要将第二棵树与水混合。 但是帧缓冲中的水的颜色已经与第一棵树混合在一起,所以水的颜色不再仅仅在帧缓冲中了。

我想到了三种方法:

  1. 将所有树反射绘制到FBO中,而不进行混合。 然后在水面上绘制结果,并启用混合。

  2. 在绘制反射时,启用深度测试(如果您当前已将其禁用)。 从前到后绘制树木反射,相对于水面稍微偏移,并且每次反射时偏移量减小。 因此,较近的树木的反射将隐藏更远的树木的反射。

  3. 与选项2类似。但是,不使用偏移和深度测试,而是使用模板测试来确保在任何像素处仅渲染一个反射树。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM