1

我正在使用 LibGDX 框架开发一个绘画应用程序,尽管这应该主要与 OpenGL 相关。

基本上,我正在寻找一种方法来防止我用来绘制的精灵在它们不完全不透明时相互重叠,因为这会产生很多令人不快的效果。将 1.0 alpha 的精灵绘制到纹理上,然后以所需的 alpha 将该纹理绘制回我想要的效果,但该方法将涉及在用户绘制时不断地重新创建纹理,这太密集而无法实现。

从我所见,对我来说最好的选择,基本而言,是在片段着色器中从另一个中减去这些精灵中的一个。我很确定这条路线可行,但我无法弄清楚如何才能在片段着色器中实际比较它们。两者都将始终使用相同的单一纹理,但它们将位于不同的位置。是否有可能像那样实际比较它们,还是有合适的替代方案?

4

1 回答 1

1

实际上不可能以这种方式比较应用于片段或顶点着色器中不同几何体(精灵)的 2 个纹理,因为它们将在不同的时间点在着色器的不同迭代中渲染。

您可以有两个或更多纹理单元来采样和减去多个纹理,但它们必须应用于相同的顶点(精灵),我认为这不是您想要的。

更好的方法是在渲染精灵之前计算精灵的接近度。然后,您可以更改它们的位置,或者将接近度作为统一值传递给着色器,然后可以使用它来更改精灵的片段像素的 alpha。

于 2013-07-08T02:03:19.917 回答