Opengl 用定向光源计算反射矢量
我使用的是一个简单的Phong着色模型,场景由一个方向为y的平行光照亮,单色光强度为1。视点无限远,沿着向量(-1,0,-1)给出的方向观看 在这种情况下,着色方程由下式给出Opengl 用定向光源计算反射矢量,opengl,glsl,phong,Opengl,Glsl,Phong,我使用的是一个简单的Phong着色模型,场景由一个方向为y的平行光照亮,单色光强度为1。视点无限远,沿着向量(-1,0,-1)给出的方向观看 在这种情况下,着色方程由下式给出 I = k_d*L(N dot L)+k_s*L(R dot V)^n_s 其中,L为定向光源,kd,ks均为0.5和n_s=50 在这种情况下,如何计算R向量 我很困惑,因为计算有限向量需要有限坐标。对于平行光,它在-y方向上无限远。这些方程使用法向量。所以在你的例子中,当你使用平行光时,它仅仅意味着L是常数,等于[x
I = k_d*L(N dot L)+k_s*L(R dot V)^n_s
其中,L
为定向光源,kd
,ks
均为0.5
和n_s=50
在这种情况下,如何计算R
向量
我很困惑,因为计算有限向量需要有限坐标。对于平行光,它在-y方向上无限远。这些方程使用法向量。所以在你的例子中,当你使用平行光时,它仅仅意味着L是常数,等于[x=0,y=1,z=0](或[0,-1,0],我不记得了,你应该检查你的方程中L是指向点还是远离点)。反射向量可以通过使用GLSL的
反射函数来计算
vec3 toEye = normalize(vec3(0.0) - vVaryingPos);
vec3 lightRef = normalize(reflect(-light, normal));
float spec = pow(dot(lightRef, toEye), 64.0f);
specularColor = vec3(1.0)*max(spec, 0.0);
计算是在眼睛空间进行的。。。因此eyePos在vec3(0.0)中,您应该在pow
之前应用max
,因为否则负值在提升到64次方时将变为正值,而它们本应被钳制为0。