用定向光源计算反射矢量
Posted
技术标签:
【中文标题】用定向光源计算反射矢量【英文标题】:Computing the Reflection Vector with Directional Light source 【发布时间】:2012-05-17 06:13:51 【问题描述】:我正在使用一种简单形式的 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 方向上无限远。
【问题讨论】:
【参考方案1】:反射矢量可以通过使用 GLSL 中的reflect
函数来计算。
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。 【参考方案2】:
这些方程使用法线向量。所以在你的情况下,当你使用定向光时,它只是意味着 L 是常数并且等于 [x=0, y=1, z=0] (或 [0, -1, 0],我不记得了,您应该检查您的方程式中 L 是指向该点还是远离该点)。
【讨论】:
以上是关于用定向光源计算反射矢量的主要内容,如果未能解决你的问题,请参考以下文章