目前正在制作游戏,我想添加漂亮的着色效果,如水变形。 我将场景渲染到FBO然后在其上应用高度图失真着色器。 失真由片段着色器应用。 normalMapPosition是法线贴图当前位置的颜色矢量。
vec2 normalCoord = v_texCoord0;
vec4 normalMapPosition = 2 * texture2D(u_normals, v_texCoord0);
vec2 distortedCoord = normalCoord + (normalMapPosition.xz * 0.05);
然后将其渲染到屏幕上,我获得以下结果
问题是有一个对角线的人工制品遍历整个图像。 我认为这是由于openGL将纹理处理为两个三角形。 有没有一种很好的方法来处理这类问题?
答案 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();