反射公式
反射是经常用到的一个公式,之前在Phong光照的时候推导过一次,这次再整理一下。反射过程如图所示:
首先需要保证光方向向量AB,法向量N均为单位向量,反射向量AC,光入射方向AD = -AB
θ为入射角,由反射公式我们知道,AC与AB沿y轴对称,AD与AC沿x轴对称
EB = N * |AB|cosθ = N * dot(N,AB)
DC = 2 * EB = -2 * N * dot(N, AB)
AC = AD + DC = -AB + 2 * N * dot(N,AB)
C++代码如下:
static Vector3 Reflect(const Vector3& vec, const Vector3& normal)
{
return -vec + normal * 2.0f * Vector3::Dot(vec, normal);
}
这里面使用的是vec是指向光源方向的Vec(似乎在shader里面使用这种表示方法更多一些)ÿ