I am writing bit of my shader code, for those who are interested. I hope its correct :?). It seems to working; but as I said before generated normalmap is not smooth.
vec3 normal= texture2D(heighttexture, gl_TexCoord[0].xy).xyz;
normal.r=dFdx(normal.x)*50.0;
normal.g=dFdy(normal.y)*50.0;
normal.b=0.0;
float z = abs(normal.r)+abs(normal.g);
if( z > 1.0 )
{
normal.rg/=z;
}
float blue = 1.0-length(normal);
normal=normal*0.5+0.5;
normal.b= blue;
This is another code that I tried, generates smooth normals, it makes again expensive.
const float width=0.01;
const float strength=1.0;
vec3 nomralfrombump(sampler2D atex,vec2 textcoord)
{
vec4 heretex = texture2D(atex, textcoord.xy);
if(heretex.a == 0.0)
return vec3(0.0,0.0,0.0);
vec2 dus= vec2(textcoord.x+width, textcoord.y);
vec2 dvs= vec2(textcoord.x, textcoord.y+width);
vec4 du4 = heretex - texture2D(atex,dus);
vec4 dv4 = heretex - texture2D(atex,dvs);
du4.x=du4.x*strength;
dv4.x=dv4.x*strength;
float z = abs(du4.x)+abs(dv4.x);
if( z > 1.0 )
{
du4.r/=z;
dv4.r/=z;
}
float dw = sqrt(1.0-du4.r*du4.r - dv4.r*dv4.r);
vec3 normal=vec3(du4.x*0.5+0.5,dv4.x*0.5+0.5,dw);
return normal;
}