Opengl 平铺贴图上libgdx中摄影机之后的着色器高度贴图平移

Opengl 平铺贴图上libgdx中摄影机之后的着色器高度贴图平移,opengl,libgdx,glsl,shader,tile,Opengl,Libgdx,Glsl,Shader,Tile,我试图创建一个很好的水失真效果使用着色器在一个2D游戏的基础上libgdx使用heightmap 首先,我将整个场景渲染到FBO 然后,我将失真效果应用于渲染的FBO,并使用遮罩确定瀑布的位置。 在应用遮罩之前: 为了获得效果,我基于时间平移着色器中高度贴图的Y坐标,并使用fractheighmapCoord在其中循环 问题是,当相机跟随播放器移动时,heighmap在X轴上保持静止。 我决定根据camera.position和fract函数来翻译heightmapCoord。heighmap似

我试图创建一个很好的水失真效果使用着色器在一个2D游戏的基础上libgdx使用heightmap

首先,我将整个场景渲染到FBO

然后,我将失真效果应用于渲染的FBO,并使用遮罩确定瀑布的位置。 在应用遮罩之前:

为了获得效果,我基于时间平移着色器中高度贴图的Y坐标,并使用fractheighmapCoord在其中循环

问题是,当相机跟随播放器移动时,heighmap在X轴上保持静止。 我决定根据camera.position和fract函数来翻译heightmapCoord。heighmap似乎跟随相机,但速度较慢,导致效果在瀑布遮罩内滑动

似乎有一个投影问题。而且,我不确定这是否是创造这种效果的好方法

如何使高度贴图完全跟随相机移动

编辑:

我只使用片段着色器,顶点着色器是穿透着色器:

void main() {
    v_color = a_color;
    v_texCoord0 = a_texCoord0;
    gl_Position =  u_projTrans * vec4(a_position, 1.);
}

我找到了解决办法。必须将坐标从屏幕转换为着色器,如下所示:

假设屏幕为15*10平铺宽度*高度的视口,则需要将heighmap纹理坐标转换为

texCoord.x += camera.x / viewPortTileWidth;  // 15
texCoord.y += camera.y / viewPortTileHeight; // 10
然后,当玩家移动时,高地图将不再滑动