我试图在使用高度图的基于libgdx的2D游戏上使用着色器创建漂亮的水失真效果。
首先,我将整个场景渲染为FBO
然后我将失真效果应用于渲染的FBO并使用蒙版来确定瀑布位置。 在应用面具之前:
为了达到这个效果,我根据时间在着色器中平移高度图的Y坐标,并使用fract(heighmapCoord)
在其中循环。
问题是当相机移动到跟随播放器时,高度图在X轴上保持静止。
我决定根据heightmapCoord
和camera.position
函数翻译fract()
。 heighmap似乎跟随相机,但速度较慢,导致效果在瀑布面罩内滑动。
似乎存在预测问题。此外,我不确定这是否是创造这种效果的好方法。
如何使高度贴图完全跟随相机移动?
编辑:
我只使用片段着色器,顶点一个是passthrought着色器:
void main() {
v_color = a_color;
v_texCoord0 = a_texCoord0;
gl_Position = u_projTrans * vec4(a_position, 1.);
}
答案 0 :(得分:0)
我找到了解决方案。您必须将坐标从屏幕转换为着色器,如下所示:
假设屏幕为15 * 10个瓷砖(宽度*高度)的视口,您需要将heighmap纹理坐标转换为
texCoord.x += camera.x / viewPortTileWidth; // 15
texCoord.y += camera.y / viewPortTileHeight; // 10
然后当玩家移动时,heighmap将不再滑动。