从GLSL着色器

时间:2015-05-20 12:16:34

标签: opengl glsl fft heightmap

我目前正在使用OpenGL进行海洋渲染系统。高度图用fft计算,看起来不错。但我通过从高度图生成法线贴图有一些问题。通过使用预先计算的高度图作为纹理,在片段着色器中创建法线贴图。要计算法线我使用sobel滤波器,这是我的代码:

 // z0 -- z1 -- z2
 // |     |     |
 // z3 -- h  -- z4
 // |     |     |
 // z5 -- z6 -- z7

// Sobel Filter
normal.z = 1/normalStrength;
normal.x = z2 + 2*z4 + z7 - z0 - 2*z3 - z5;
normal.y = z5 + 2*z6 + z7 -z0 - 2*z1 - z2;

z0 - z7是高度图纹理的高度值。 法线正确计算,但在正常纹理中会出现岛状的步骤/接缝,这会破坏法线贴图的平滑度。高度贴图看起来非常光滑,没有接缝/边缘。

我认为高度值分别存在一些数值错误,但我不知道如何修复它。

0 个答案:

没有答案