libgdx heighmap着色器失真伪影

时间:2014-11-08 18:07:46

标签: opengl libgdx shader

目前正在制作游戏,我想添加漂亮的着色效果,如水变形。 我将场景渲染到FBO然后在其上应用高度图失真着色器。 失真由片段着色器应用。 normalMapPosition是法线贴图当前位置的颜色矢量。

vec2 normalCoord = v_texCoord0;
vec4 normalMapPosition = 2 * texture2D(u_normals, v_texCoord0);
vec2 distortedCoord = normalCoord + (normalMapPosition.xz * 0.05);

然后将其渲染到屏幕上,我获得以下结果

diagonal artifact on shader effect

问题是有一个对角线的人工制品遍历整个图像。 我认为这是由于openGL将纹理处理为两个三角形。 有没有一种很好的方法来处理这类问题?

1 个答案:

答案 0 :(得分:0)

我最终找到了解决方案,问题来自于利用相同的FBO绘制场景然后渲染着色器如下:

batch.setShader(waterfallShaderProgram)
fbo.begin();
batch.begin();
// here is the problem, fbo is started and used to 
// draw at the same time
batch.draw(fbo.getColorBufferTexture());
batch.end()
fbo.end();

将场景渲染到FBO fbo以便在顶部应用其他效果。 引入新的FBO fbo2解决了这个问题。

batch.setShader(waterfallShaderProgram)
fbo2.begin();
batch.begin();
batch.draw(fbo.getColorBufferTexture());
batch.end()
fbo2.end();