我试着得到我的光矢量数学公式是
float3 l_ik = p_light - focus / || p_light - focus ||
为了获得|| p_light - focus ||
的值,使用了cv中的normalize()
函数,然后我试图简单地计算A/||B||,因此我试图将公式视为
A / B <=> A * B^(-1)
in c++:
float3 l_ik = (p_light - focus) * ( normalize(p_light,focus)^(-1))
得到no match for 'operator^' in 'math::operator*(...)
。这意味着这个操作符没有实现,还是什么?或者不可能计算向量^(-1)
谢谢你的帮助
^是c++中的'异或'操作符,而不是您所期望的。pow(some_mat, number);
似乎更合适
也normalize()用于制作单位向量,并接受src和dst Mat,相反,您可能想要norm(p_light - focus); // the norm of the diff
(你指的是opengl,而不是opencv吗?)
[编辑]
昨天很盲目,你的公式只是单位长度(p_light - focus)向量,所以:
Vec3f v = p_light - focus;
Vec3f l_ik = v / norm(v);