我在3D空间工作。我有一条光线,或者更具体地说是3D空间中光线的起始和传输矢量。我也有一个三角形,我知道这个事实被射线击中了。通过三角形我当然意味着我有三个3D点。我也可以轻松地从这个三角形计算出法向量。
现在我需要获得一个新的射线,这将是特定击中后的反射。
我也不知道接触点在三角形上的位置,但显然必须考虑到获得反射光线。那一点将是新射线的开始。
这在2D中是微不足道的,但我无法弄清楚如何在3D中完成它。
我正在使用带有ofxRay插件的C ++和OpenFrameworks。
答案 0 :(得分:2)
这个问题完全分为两个问题:找到光线与三角形相交的点 - 这是反射光线的原点 - 并找到反射光线的方向(矢量)。
让三角形的法向量为 n 。描述三角形平面的等式是
nx = k
您可以通过将一个三角形顶点插入该等式来确定k。入射光线的方程是
x = t v + p
其中 p 是光线的原点, v 是其(标准化)方向。要找到光线的交点,只需解决这对方程式,这些方程式归结为求解
n (t v + p )= k
表示t,然后将其插回到光线的等式中。
要找到反射光线的方向,我们必须将入射光线的分量平行于三角形的法线反转:
v r = v + 2( vn ) v
(注意标志 - 我假设射线击中的面部正常点。)