在3D空间中反射三角形上的光线

时间:2017-04-16 00:14:09

标签: c++ graphics 3d geometry raycasting

我在3D空间工作。我有一条光线,或者更具体地说是3D空间中光线的起始和传输矢量。我也有一个三角形,我知道这个事实被射线击中了。通过三角形我当然意味着我有三个3D点。我也可以轻松地从这个三角形计算出法向量。

现在我需要获得一个新的射线,这将是特定击中后的反射。

我也不知道接触点在三角形上的位置,但显然必须考虑到获得反射光线。那一点将是新射线的开始。

这在2D中是微不足道的,但我无法弄清楚如何在3D中完成它。

我正在使用带有ofxRay插件的C ++和OpenFrameworks。

1 个答案:

答案 0 :(得分:2)

这个问题完全分为两个问题:找到光线与三角形相交的点 - 这是反射光线的原点 - 并找到反射光线的方向(矢量)。

让三角形的法向量为 n 。描述三角形平面的等式是

nx = k

您可以通过将一个三角形顶点插入该等式来确定k。入射光线的方程是

x = t v + p

其中 p 是光线的原点, v 是其(标准化)方向。要找到光线的交点,只需解决这对方程式,这些方程式归结为求解

n (t v + p )= k

表示t,然后将其插回到光线的等式中。

要找到反射光线的方向,我们必须将入射光线的分量平行于三角形的法线反转:

v r = v + 2( vn v

(注意标志 - 我假设射线击中的面部正常点。)