Math Mö;ller&x2013;当光线沿法线移动时,Trumbore距离与点平面距离不同

Math Mö;ller&x2013;当光线沿法线移动时,Trumbore距离与点平面距离不同,math,raycasting,Math,Raycasting,鉴于此: Vector3 p_a = (-8720, 1105, -5249) Vector3 p_b = (-13149, 1124, -5249) Vector3 p_c = (-13330, 1103, -3404) //p_a p_b, p_c are the points of the triangle Vector3 p_q = (-11737, 1071, -4678) Vector3 normal = new Vector3(0.0000000, 0.9999285, 0.011

鉴于此:

Vector3 p_a = (-8720, 1105, -5249)
Vector3 p_b = (-13149, 1124, -5249)
Vector3 p_c = (-13330, 1103, -3404) //p_a p_b, p_c are the points of the triangle
Vector3 p_q = (-11737, 1071, -4678)
Vector3 normal = new Vector3(0.0000000, 0.9999285, 0.0119620) //(0, 4096, 49) normalized
如果我使用
Vector3.Dot((p_q-p_a),正常)
结果为27.16

然而,如果我沿着法线从p_q抛出一条光线,并使用Möller–Trumbore算法(精确地说,尽管我尝试了不同的算法并得到了相同的结果),我得到到交点的距离是40.2


由于使用Möller–Trumbore的光线沿着法线方向,如果我得到一个交点,我不应该得到相同的距离吗?我肯定错过了一些明显的东西,但我看不到什么。

问题是你的“法线”不是三角形的法线。要计算法线,请取
b-a
c-a
的叉积,并将结果归一化。谢谢您的回答!法线应该是三角形的法线,可能会丢失一些精度,因为法线由于转换到定点数学而丢失精度。因此,精度似乎是罪魁祸首,否则结果应该完全相同,对吗?好吧,岁差不是问题所在。正常是错误的。它不能有它的x=0。