我正在努力创造一个水的例子,我知道第一个需要的是能够做出反思,这已经完成了。
我陷入下一步,即将反射与法线贴图结合起来。
我尝试的是像往常一样加载立方体纹理,计算反射然后加载法线贴图并在最后一步中将它们组合,但水消失了。
这是我的代码:
顶点着色器
attribute vec3 a_normBT;
attribute vec3 a_normL;
attribute vec3 a_normTan;
attribute vec3 a_posL;
attribute vec2 a_uv;
uniform mat4 u_W;
uniform mat4 u_WVP;
varying vec3 v_normW;
varying vec3 v_normBT;
varying vec3 v_normTan;
varying vec3 v_posW;
varying vec2 v_uv;
void main()
{
gl_Position = u_WVP * vec4(a_posL, 1.0);
v_uv = a_uv;
v_normW = normalize((u_W*vec4(a_normL, 0.0)).xyz);
v_normBT = normalize((u_W*vec4(a_normBT,0.0)).xyz);
v_normTan = normalize((u_W*vec4(a_normTan,0.0)).xyz);
v_posW = (u_W*vec4(a_posL, 1.0)).xyz;
}
片段着色器
precision mediump float;
uniform samplerCube u_s_texture;
uniform sampler2D u_s_normalMap;
uniform vec3 u_cpos;// the camera position is already in world space
varying vec3 v_normW;
varying vec3 v_normBT;
varying vec3 v_normTan;
varying vec3 v_posW;
varying vec2 v_uv;
void main()
{
vec4 tempText = texture2D(u_s_normalMap, v_uv);
vec3 Normal = normalize(v_normW);
vec3 totalDifusse = vec3(0.0,0.0,0.0);
vec3 totalSpecular = vec3(0.0,0.0,0.0);
vec3 toEye = u_cpos- v_posW;
vec3 reflectDir = reflect(normalize(-toEye), normalize(v_normW)); // reflect() in non linear
gl_FragColor = tempText*textureCube(u_s_texture,reflectDir);
}
我期望发生的是我所拥有的四边形应具有静态涟漪。 谢谢。
答案 0 :(得分:0)
不知道系统的坐标系设置,因此制服具有确切含义,而且懒得分析/调试未知代码以帮助您。
相反看看:Normal mapping gone horribly wrong
还要检查glGetShaderInfoLog
?
glGetShaderInfoLog
。