3D 三角形上的反射光线 space
Reflecting ray on triangle in 3D space
我在 3D 中工作 space。我有一条射线,或者更具体地说,是 3D space 中一条射线的起始和传输矢量。我还有一个三角形,我知道它确实被射线击中了。我所说的三角形当然是指我有三个 3D 点。我也可以很容易地从这个三角形计算法向量。
现在我需要获得一条新光线,它是特定命中后的反射。
我也不太清楚接触点在三角形的哪个位置,但显然必须考虑到它才能获得反射光线。那一点将是那条新射线的起点。
这在 2D 中很容易做到,但我不知道如何在 3D 中做到。
我正在使用带有 ofxRay 插件的 C++ 和 OpenFrameworks。
这个问题完全分为两个问题:找到光线与三角形相交的点——这是反射光线的原点——并找到反射光线的方向(矢量)。
设三角形的法向量为n。描述三角形平面的方程是
nx = k
您可以通过将三角形顶点之一代入该等式来确定 k。入射光线方程为
x = tv + p
其中 p 是光线的原点,v 是它的(归一化)方向。要找到射线的交点,只需求解这对方程即可,归结为求解
n(tv + p) = k
对于 t,然后将其代入射线方程。
要找到反射光线的方向,我们必须反转平行于三角形法线的入射光线的分量:
vr = v + 2(vn)v
(注意标志——我假设法线指向光线击中的面。)
我在 3D 中工作 space。我有一条射线,或者更具体地说,是 3D space 中一条射线的起始和传输矢量。我还有一个三角形,我知道它确实被射线击中了。我所说的三角形当然是指我有三个 3D 点。我也可以很容易地从这个三角形计算法向量。
现在我需要获得一条新光线,它是特定命中后的反射。
我也不太清楚接触点在三角形的哪个位置,但显然必须考虑到它才能获得反射光线。那一点将是那条新射线的起点。
这在 2D 中很容易做到,但我不知道如何在 3D 中做到。
我正在使用带有 ofxRay 插件的 C++ 和 OpenFrameworks。
这个问题完全分为两个问题:找到光线与三角形相交的点——这是反射光线的原点——并找到反射光线的方向(矢量)。
设三角形的法向量为n。描述三角形平面的方程是
nx = k
您可以通过将三角形顶点之一代入该等式来确定 k。入射光线方程为
x = tv + p
其中 p 是光线的原点,v 是它的(归一化)方向。要找到射线的交点,只需求解这对方程即可,归结为求解
n(tv + p) = k
对于 t,然后将其代入射线方程。
要找到反射光线的方向,我们必须反转平行于三角形法线的入射光线的分量:
vr = v + 2(vn)v
(注意标志——我假设法线指向光线击中的面。)