GLSL Specular在接近时突出显示更暗

时间:2018-06-06 21:09:55

标签: opengl glsl vertex-shader

如何修复我的specluar组件,使其在远近时变得更亮?

顺便说一句,我使用的是一个亮点,而不是默认的灯光变量。 如果有必要,我会在这里放置计算镜面反射分量的线:(顶点着色器)

//pl_pos is the raw vec3(x y z) before this
vec3 pointlight = gl_ModelViewMatrix * vec4(pl_pos,1.0);
vec3 Norm = normalize(gl_NormalMatrix * gl_Normal);
//Adding Vertex Calc
vec4 VertexPos = gl_ModelViewMatrix * gl_Vertex;
vec3 LightVec = normalize(pointlight - VertexPos.xyz);
float SpecularExp = 128.0;
float NormLightAng = max(0.0, dot(Norm,LightVec));
vec4 Specular = vec4(pow(NormLightAng, SpecularExp));
gl_FrontColor = Diffuse + Specular;

1 个答案:

答案 0 :(得分:0)

@BDL给出了答案 “你使用哪种照明模型?我不知道镜面反射分量的计算位置取决于点(n,l)^ p。通常它是点(反射,视图)^ p(phong照明)或点(n) ,中途)^ p(blinn-phong)。至少,视图矢量应该以某种方式影响镜面反射。“

@ Rabbid76通过说: “注意,点(Norm,LightVec))是一种朗伯漫反射,请参阅如何伪造光线对航空器的影响?”

非常感谢你的帮助!