使用LibGDX绘制液体

5

我对LibGDX和OpenGL都比较新,但我成功地使用Box2D API制作了一个简单的液体模拟。请查看此链接(这是其他人的动画):

物理液体

目前,我将液体粒子呈圆形渲染,就像第一张图片一样,但我想让它看起来更自然,就像第三张图片一样。

答案可能是使用距离场,我尝试了这种方法,但没有效果。我使用SpriteBatch类将每个粒子绘制为纹理,但可以更改。我制作了一张纹理(从程序化Pixmap中),表示每个粒子为填充圆,带有alpha通道,从中心进一步减小,因此效果类似于第二张图片。

现在,我必须启用阈值过滤器到alpha通道,类似于:“仅绘制alpha>0.5的像素”。这是后处理步骤,因为重要的是在所有粒子被绘制之后像素的alpha通道是什么。可能或可能不需要使用着色器(ProgramShader),但经过一些研究,我仍然不知道如何做到这一点。感谢任何帮助。

编辑: 这个 示例解释了该方法,但是它是使用ActionScript实现的。

1个回答

1
这可以很容易地使用着色器完成,但有趣的是你不需要编写它们。
在渲染距离场字体时(即放大时仍然看起来很好的字体),还会使用“仅绘制 alpha > 0.5 的像素”。
请访问以下链接:https://github.com/libgdx/libgdx/wiki/Distance-field-fonts,直接跳到最后一步。您应该能找到所需内容。
希望这可以帮到您。

1
我确实尝试过这个方法,但问题在于它会遮盖每个图像的 alpha 通道。因此,如果我画了100个圆形,并使用“随半径减小的 alpha 值”以及 alpha > 0.5 的遮罩,那么我得到的只是100个较小的圆形,因为每个遮罩都是独立完成的。相反,我需要先绘制所有带有 alpha 通道的圆形,让它们混合,然后再应用 alpha 遮罩。目前正在研究模板和 FrameBuffer 类。 - vic

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