我正在尝试将镜面闪电添加到我的 android OpenGL 项目中,但光线仅投射在我的对象的一部分上,如您在我的示例中所见:
在我的片段着色器中,我计算颜色如下:
float dot(vec3 v1, vec3 v2)
{
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
}
void main()
{
float distSqr = dot(lightDir, lightDir);
float att = clamp(1.0 - 0.001 * sqrt(distSqr), 0.0, 1.0);
vec3 L = lightDir * inversesqrt(distSqr);
vec4 baseColor = texture2D(texture1, tCoord);
vec3 N = normalize(baseColor.xyz * 2.0 - 1.0);
vec3 E = normalize(eyeVec);
vec3 reflectV = reflect(-L, N);
vec4 ambientTerm = baseColor;
// base * diffuse * max(dot(N, L), 0.0)
vec4 diffuseTerm = baseColor * matDiffuse * max(dot(N, L), 0.0);
//vec4 diffuseTerm = baseColor * gl_FrontMaterial.diffuse * max(dot(N, L), 0.0);
// spec * pow(max(dot(reflectV, E), 0.0), shininess)
vec4 specularTerm = matSpecular * pow(max(dot(reflectV, E), 0.0), 5.0);
//vec4 specularTerm = vec4(1.0, 1.0, 1.0, 1.0) * pow(max(dot(reflectV, E), 0.0), 5.0);
gl_FragColor = (ambientTerm + diffuseTerm + specularTerm) * att;
}
灯位为:0,2,2
如果您需要更多信息,请索取。