这么简单的问题居然都忘了。。。郁闷。。。还是记下来。
一个向量V, 在法向量为N的平面上产生的反射向量V'
v'- v = alpha * N/|N| ( alpha是一个常数 , N/|N| 是单位法向量)
v' = v + alpha * N/|N|
alpha是-v向量在N向量上的投影长度
-v * N = |-v| * |N| * cosCita = alpha * |N| *0.5
所以 alpha = 2*(-v *N)/|N|
从而 v' = v + 2*(-v*N)/|N| * N / |N| = v - 2*(v*N)*N/(N*N)
这个公式当中, v, N都是非标准向量
如果N是单位向量, 可退化为: v' = v - 2 * (v*N) *N
更简单的思路,眼球位置在vEye, 顶点在vPos, 单位化的法线向量为N, 于是视线向量为vEye - vPos, 将其单位化
得到向量v
v*N 即为v向量在N向量上的投影长度,
要利用三角形方法进行矢量运算得出反射向量就需要2*(v*N)*N 这个改变长度后的与原来法向量重合的向量
长度即为v向量在N向量上的投影长度的2倍
这时再利用向量相减就可以得到反射向量了,
最后的公式: v’= 2*(v*N)*N - v, 注意这里的v和上面的不同哦